{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "66ca304c-65f0-4d57-91db-4f1a48ddb492",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "训练模型: tfidf_rf\n",
      "Fitting 5 folds for each of 10 candidates, totalling 50 fits\n",
      "tfidf_rf 最佳参数: {'tfidf__max_features': 3000, 'rf__n_estimators': 100, 'rf__min_samples_split': 2, 'rf__min_samples_leaf': 1, 'rf__max_features': 'sqrt', 'rf__max_depth': None}\n",
      "tfidf_rf 测试集F1分数: 0.6744\n",
      "\n",
      "训练模型: count_rf\n",
      "Fitting 5 folds for each of 10 candidates, totalling 50 fits\n",
      "训练 count_rf 模型时出错: Invalid parameter 'tfidf' for estimator Pipeline(steps=[('count',\n",
      "                 CountVectorizer(max_features=5000, ngram_range=(1, 2))),\n",
      "                ('rf',\n",
      "                 RandomForestClassifier(class_weight='balanced', n_jobs=-1,\n",
      "                                        random_state=42))]). Valid parameters are: ['memory', 'steps', 'transform_input', 'verbose'].\n",
      "\n",
      "训练模型: tfidf_svm\n",
      "Fitting 5 folds for each of 10 candidates, totalling 50 fits\n",
      "tfidf_svm 最佳参数: {'tfidf__max_features': 5000, 'svm__kernel': 'linear', 'svm__gamma': 'auto', 'svm__C': 1}\n",
      "tfidf_svm 测试集F1分数: 0.6856\n",
      "\n",
      "训练模型: tfidf_lr\n",
      "Fitting 5 folds for each of 8 candidates, totalling 40 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\17828\\AppData\\Roaming\\Python\\Python312\\site-packages\\sklearn\\model_selection\\_search.py:317: UserWarning: The total space of parameters 8 is smaller than n_iter=10. Running 8 iterations. For exhaustive searches, use GridSearchCV.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tfidf_lr 最佳参数: {'tfidf__max_features': 3000, 'lr__solver': 'liblinear', 'lr__penalty': 'l2', 'lr__C': 1}\n",
      "tfidf_lr 测试集F1分数: 0.6809\n",
      "\n",
      "训练模型: tfidf_nb\n",
      "Fitting 5 folds for each of 6 candidates, totalling 30 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\17828\\AppData\\Roaming\\Python\\Python312\\site-packages\\sklearn\\model_selection\\_search.py:317: UserWarning: The total space of parameters 6 is smaller than n_iter=10. Running 6 iterations. For exhaustive searches, use GridSearchCV.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tfidf_nb 最佳参数: {'tfidf__max_features': 3000, 'nb__alpha': 0.1}\n",
      "tfidf_nb 测试集F1分数: 0.5857\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\17828\\AppData\\Local\\Temp\\ipykernel_20680\\769557366.py:149: FutureWarning: \n",
      "\n",
      "Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.\n",
      "\n",
      "  sns.barplot(x=f1_scores, y=model_names, palette='viridis')\n"
     ]
    },
    {
     "data": {
      "image/png": "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+/THH38oOTlZV155pfr371/eU4WBnNEG/Ju3gtSsWbPYjQ0yMjLk7u5+1m2OHTtW6vUBqWz72mmzZ8/W+vXrtXXr1nKaHS4lZdnXnn76aT3yyCO66qqrynl2uJSUZV87ePCgbrnlFsf/UapevboaN26sv/76q1zniotbWfa1//znPxo8eLCaNm0qSZoyZYr8/Px0/Phx+fv7l+d0YRhntAFH/ipI27ZttWnTJsf7vXv3KicnRzVr1iz1Nlu3blVwcHC5zhMXv7Lsa5IUHx+vp59+WvPnz1dgYGB5TxOXgLLsa/PmzdO7774rf39/+fv7a+PGjerWrZvGjx9fEVPGRaos+1pISIiysrIc7wsLC3Xw4EGuM8VZlWVfy8/P15EjRxzvTz8qqaCgoPwmCiM5ow2Ivwpy4403Ki0tTR9//LEkafz48br11lvl6uqq9PR05eXlFdvmrrvu0saNGxUXF6f8/HxNnDhRXbp0qeip4yJTln3tyJEj6t69u4YPH642bdroxIkTOnHiREVPHReZsuxrf/31l7Zt26atW7dq69atuuaaazRz5kxFRUVV9PRxESnLvnb//fdr8eLF+vzzz3Xw4EGNHDlSOTk5ioiIqOjp4yJSln0tIiJCH3zwgWbMmKHY2Fg98MADuv766xUQEFDR08clolzb4PxvSoqyWrRokeXl5WXVrl3bCggIsH777TfLsiyrQYMG1qJFi0rcZtq0aZbdbrcuu+wyq0GDBtbhw4crcMa4WJ3vvjZ58mRLUrEXcC5l+efa391000086gGlUpZ9bcmSJdZVV11leXp6WldccYW1cePGCpwxLlbnu69lZWVZQ4YMsYKCgix3d3frpptusnbt2lXBs8bFTP941EN5toHt/38hKsihQ4e0efNmtW/fXrVq1SrVNrt27dL27dt10003ydfXt5xniEtFWfY1oCzY11BR2NdQUdjXUJVdSBsQfwAAAABgAK75AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAMAlJCMjQ8ePH6/saQAAqiDiDwCAM5g8ebI+++yzUq+/YsUKNW/evBxnVFxhYaHatWun7777TpL0zDPPKDo6usR1T5w4oddff12WZalTp05auHChli9frq+//lq5ublq0aKFDh06VJHTBwBUILfKngAAAFXVxo0bdd1115V6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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "最佳模型: tfidf_svm\n",
      "最佳F1分数: 0.6856\n",
      "最佳参数: {'tfidf__max_features': 5000, 'svm__kernel': 'linear', 'svm__gamma': 'auto', 'svm__C': 1}\n"
     ]
    }
   ],
   "source": [
    "import jieba\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import rcParams\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n",
    "from sklearn.model_selection import train_test_split, RandomizedSearchCV\n",
    "from sklearn.metrics import classification_report, confusion_matrix, f1_score\n",
    "from sklearn.ensemble import RandomForestClassifier, VotingClassifier\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.naive_bayes import MultinomialNB\n",
    "from sklearn.pipeline import Pipeline  # 添加这行导入语句\n",
    "import seaborn as sns\n",
    "import re\n",
    "from zhconv import convert\n",
    "\n",
    "# 设置Matplotlib支持中文字体显示\n",
    "rcParams['font.sans-serif'] = ['SimHei']\n",
    "rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "# 1. 数据预处理\n",
    "def preprocess_text(text):\n",
    "    # 简繁转换\n",
    "    text = convert(text, 'zh-hans')\n",
    "    # 去除特殊字符和数字\n",
    "    text = re.sub(r'[^\\w\\s]', '', text)\n",
    "    text = re.sub(r'\\d+', '', text)\n",
    "    # 加载停用词表\n",
    "    with open('chinese_stopwords.txt', encoding='utf-8') as f:\n",
    "        stopwords = set(f.read().split())\n",
    "    # 加载自定义词典（如果有）\n",
    "    # jieba.load_userdict('bubble_tea_terms.txt')\n",
    "    \n",
    "    words = jieba.cut(text)\n",
    "    return ' '.join([word for word in words if word not in stopwords and len(word) > 1])\n",
    "\n",
    "# 加载数据\n",
    "df = pd.read_csv('final_labeled_comments.csv')\n",
    "df['processed_text'] = df['text'].astype(str).apply(preprocess_text)\n",
    "\n",
    "# 2. 文本分类（情感分析）\n",
    "# 标签编码\n",
    "label_map = {'positive': 0, 'neutral': 1, 'negative': 2}\n",
    "df['label'] = df['最终情感标签'].map(label_map)\n",
    "\n",
    "# 3. 定义多个模型管道\n",
    "pipelines = [\n",
    "    ('tfidf_rf', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=5000, ngram_range=(1, 2))),\n",
    "        ('rf', RandomForestClassifier(class_weight='balanced', random_state=42, n_jobs=-1))\n",
    "    ])),\n",
    "    ('count_rf', Pipeline([\n",
    "        ('count', CountVectorizer(max_features=5000, ngram_range=(1, 2))),\n",
    "        ('rf', RandomForestClassifier(class_weight='balanced', random_state=42, n_jobs=-1))\n",
    "    ])),\n",
    "    ('tfidf_svm', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=5000, ngram_range=(1, 2))),\n",
    "        ('svm', SVC(class_weight='balanced', probability=True, random_state=42))\n",
    "    ])),\n",
    "    ('tfidf_lr', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=5000, ngram_range=(1, 2))),\n",
    "        ('lr', LogisticRegression(class_weight='balanced', max_iter=1000, random_state=42))\n",
    "    ])),\n",
    "    ('tfidf_nb', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=5000, ngram_range=(1, 2))),\n",
    "        ('nb', MultinomialNB())\n",
    "    ]))\n",
    "]\n",
    "\n",
    "# 4. 数据集拆分\n",
    "X = df['processed_text']\n",
    "y = df['label']\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n",
    "\n",
    "# 5. 模型训练与评估\n",
    "results = []\n",
    "model_names = []\n",
    "f1_scores = []\n",
    "\n",
    "for name, pipeline in pipelines:\n",
    "    print(f\"\\n训练模型: {name}\")\n",
    "    \n",
    "    # 简化参数搜索以加快速度\n",
    "    if 'rf' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [3000, 5000] if 'tfidf' in name else ['count__max_features', 3000, 5000],\n",
    "            'rf__n_estimators': [100, 200],\n",
    "            'rf__max_depth': [None, 10, 20],\n",
    "            'rf__min_samples_split': [2, 5],\n",
    "            'rf__min_samples_leaf': [1, 2],\n",
    "            'rf__max_features': ['sqrt', 'log2']\n",
    "        }\n",
    "    elif 'svm' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [3000, 5000],\n",
    "            'svm__C': [0.1, 1],\n",
    "            'svm__gamma': ['scale', 'auto'],\n",
    "            'svm__kernel': ['linear', 'rbf']\n",
    "        }\n",
    "    elif 'lr' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [3000, 5000],\n",
    "            'lr__C': [0.1, 1],\n",
    "            'lr__penalty': ['l1', 'l2'],\n",
    "            'lr__solver': ['liblinear']\n",
    "        }\n",
    "    elif 'nb' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [3000, 5000],\n",
    "            'nb__alpha': [0.1, 0.5, 1.0]\n",
    "        }\n",
    "    \n",
    "    random_search = RandomizedSearchCV(\n",
    "        estimator=pipeline,\n",
    "        param_distributions=param_dist,\n",
    "        n_iter=10,\n",
    "        cv=5,\n",
    "        scoring='f1_weighted',\n",
    "        n_jobs=-1,\n",
    "        verbose=1,\n",
    "        random_state=42\n",
    "    )\n",
    "    \n",
    "    try:\n",
    "        random_search.fit(X_train, y_train)\n",
    "        \n",
    "        # 评估模型\n",
    "        y_pred = random_search.predict(X_test)\n",
    "        f1 = f1_score(y_test, y_pred, average='weighted')\n",
    "        \n",
    "        results.append({\n",
    "            'model': name,\n",
    "            'best_params': random_search.best_params_,\n",
    "            'f1_score': f1\n",
    "        })\n",
    "        \n",
    "        model_names.append(name)\n",
    "        f1_scores.append(f1)\n",
    "        \n",
    "        print(f\"{name} 最佳参数: {random_search.best_params_}\")\n",
    "        print(f\"{name} 测试集F1分数: {f1:.4f}\")\n",
    "    except Exception as e:\n",
    "        print(f\"训练 {name} 模型时出错: {e}\")\n",
    "        continue\n",
    "\n",
    "# 6. 可视化比较\n",
    "plt.figure(figsize=(10, 6))\n",
    "sns.barplot(x=f1_scores, y=model_names, palette='viridis')\n",
    "plt.title('不同模型的F1分数比较')\n",
    "plt.xlabel('加权F1分数')\n",
    "plt.ylabel('模型')\n",
    "plt.xlim(0, 1)\n",
    "plt.show()\n",
    "\n",
    "# 7. 选择最佳模型\n",
    "if results:\n",
    "    best_model_info = max(results, key=lambda x: x['f1_score'])\n",
    "    print(f\"\\n最佳模型: {best_model_info['model']}\")\n",
    "    print(f\"最佳F1分数: {best_model_info['f1_score']:.4f}\")\n",
    "    print(f\"最佳参数: {best_model_info['best_params']}\")\n",
    "else:\n",
    "    print(\"没有成功训练任何模型，请检查数据和参数设置\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e03f4eea-4cc9-4d6b-9956-336a7fbf0189",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "训练模型: tfidf_rf\n",
      "Fitting 5 folds for each of 20 candidates, totalling 100 fits\n",
      "tfidf_rf 最佳参数: {'tfidf__max_features': 10000, 'rf__n_estimators': 200, 'rf__min_samples_split': 5, 'rf__min_samples_leaf': 1, 'rf__max_features': 'sqrt', 'rf__max_depth': None}\n",
      "tfidf_rf 测试集F1分数: 0.6744\n",
      "\n",
      "训练模型: tfidf_svm\n",
      "Fitting 5 folds for each of 20 candidates, totalling 100 fits\n",
      "tfidf_svm 最佳参数: {'tfidf__max_features': 5000, 'svm__kernel': 'linear', 'svm__gamma': 'scale', 'svm__C': 1}\n",
      "tfidf_svm 测试集F1分数: 0.6913\n",
      "\n",
      "训练模型: tfidf_lr\n",
      "Fitting 5 folds for each of 20 candidates, totalling 100 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\17828\\AppData\\Roaming\\Python\\Python312\\site-packages\\sklearn\\linear_model\\_sag.py:348: ConvergenceWarning: The max_iter was reached which means the coef_ did not converge\n",
      "  warnings.warn(\n",
      "C:\\Users\\17828\\AppData\\Roaming\\Python\\Python312\\site-packages\\sklearn\\model_selection\\_search.py:317: UserWarning: The total space of parameters 6 is smaller than n_iter=20. Running 6 iterations. For exhaustive searches, use GridSearchCV.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tfidf_lr 最佳参数: {'tfidf__max_features': 5000, 'lr__solver': 'saga', 'lr__penalty': 'l1', 'lr__C': 10}\n",
      "tfidf_lr 测试集F1分数: 0.6567\n",
      "\n",
      "训练模型: tfidf_nb\n",
      "Fitting 5 folds for each of 6 candidates, totalling 30 fits\n",
      "tfidf_nb 最佳参数: {'tfidf__max_features': 5000, 'nb__alpha': 0.1}\n",
      "tfidf_nb 测试集F1分数: 0.5764\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\17828\\AppData\\Local\\Temp\\ipykernel_20680\\1626814346.py:145: FutureWarning: \n",
      "\n",
      "Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.\n",
      "\n",
      "  sns.barplot(x=f1_scores, y=model_names, palette='viridis')\n"
     ]
    },
    {
     "data": {
      "image/png": "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+/THH38oOTlZV155pfr371/eU4WBnNEG/Ju3gtSsWbPYjQ0yMjLk7u5+1m2OHTtW6vUBqWz72mmzZ8/W+vXrtXXr1nKaHS4lZdnXnn76aT3yyCO66qqrynl2uJSUZV87ePCgbrnlFsf/UapevboaN26sv/76q1zniotbWfa1//znPxo8eLCaNm0qSZoyZYr8/Px0/Phx+fv7l+d0YRhntAFH/ipI27ZttWnTJsf7vXv3KicnRzVr1iz1Nlu3blVwcHC5zhMXv7Lsa5IUHx+vp59+WvPnz1dgYGB5TxOXgLLsa/PmzdO7774rf39/+fv7a+PGjerWrZvGjx9fEVPGRaos+1pISIiysrIc7wsLC3Xw4EGuM8VZlWVfy8/P15EjRxzvTz8qqaCgoPwmCiM5ow2Ivwpy4403Ki0tTR9//LEkafz48br11lvl6uqq9PR05eXlFdvmrrvu0saNGxUXF6f8/HxNnDhRXbp0qeip4yJTln3tyJEj6t69u4YPH642bdroxIkTOnHiREVPHReZsuxrf/31l7Zt26atW7dq69atuuaaazRz5kxFRUVV9PRxESnLvnb//fdr8eLF+vzzz3Xw4EGNHDlSOTk5ioiIqOjp4yJSln0tIiJCH3zwgWbMmKHY2Fg98MADuv766xUQEFDR08clolzb4PxvSoqyWrRokeXl5WXVrl3bCggIsH777TfLsiyrQYMG1qJFi0rcZtq0aZbdbrcuu+wyq0GDBtbhw4crcMa4WJ3vvjZ58mRLUrEXcC5l+efa391000086gGlUpZ9bcmSJdZVV11leXp6WldccYW1cePGCpwxLlbnu69lZWVZQ4YMsYKCgix3d3frpptusnbt2lXBs8bFTP941EN5toHt/38hKsihQ4e0efNmtW/fXrVq1SrVNrt27dL27dt10003ydfXt5xniEtFWfY1oCzY11BR2NdQUdjXUJVdSBsQfwAAAABgAK75AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAMAlJCMjQ8ePH6/saQAAqiDiDwCAM5g8ebI+++yzUq+/YsUKNW/evBxnVFxhYaHatWun7777TpL0zDPPKDo6usR1T5w4oddff12WZalTp05auHChli9frq+//lq5ublq0aKFDh06VJHTBwBUILfKngAAAFXVxo0bdd1115V6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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "最佳模型: tfidf_svm\n",
      "最佳F1分数: 0.6913\n",
      "最佳参数: {'tfidf__max_features': 5000, 'svm__kernel': 'linear', 'svm__gamma': 'scale', 'svm__C': 1}\n"
     ]
    }
   ],
   "source": [
    "import jieba\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import rcParams\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n",
    "from sklearn.model_selection import train_test_split, RandomizedSearchCV\n",
    "from sklearn.metrics import classification_report, confusion_matrix, f1_score\n",
    "from sklearn.ensemble import RandomForestClassifier, VotingClassifier\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.naive_bayes import MultinomialNB\n",
    "from sklearn.pipeline import Pipeline\n",
    "import seaborn as sns\n",
    "import re\n",
    "from zhconv import convert\n",
    "\n",
    "# 设置Matplotlib支持中文字体显示\n",
    "rcParams['font.sans-serif'] = ['SimHei']\n",
    "rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "# 1. 数据预处理\n",
    "def preprocess_text(text):\n",
    "    # 简繁转换\n",
    "    text = convert(text, 'zh-hans')\n",
    "    # 去除特殊字符和数字\n",
    "    text = re.sub(r'[^\\w\\s]', '', text)\n",
    "    text = re.sub(r'\\d+', '', text)\n",
    "    # 加载停用词表\n",
    "    with open('chinese_stopwords.txt', encoding='utf-8') as f:\n",
    "        stopwords = set(f.read().split())\n",
    "    # 加载自定义词典（如果有）\n",
    "    jieba.load_userdict('bubble_tea_terms.txt')\n",
    "    \n",
    "    words = jieba.cut(text)\n",
    "    return ' '.join([word for word in words if word not in stopwords and len(word) > 1])\n",
    "\n",
    "# 加载数据\n",
    "df = pd.read_csv('final_labeled_comments.csv')\n",
    "df['processed_text'] = df['text'].astype(str).apply(preprocess_text)\n",
    "\n",
    "# 2. 文本分类（情感分析）\n",
    "# 标签编码\n",
    "label_map = {'positive': 0, 'neutral': 1, 'negative': 2}\n",
    "df['label'] = df['最终情感标签'].map(label_map)\n",
    "\n",
    "# 3. 定义多个模型管道\n",
    "pipelines = [\n",
    "    ('tfidf_rf', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=10000, ngram_range=(1, 3))),\n",
    "        ('rf', RandomForestClassifier(class_weight='balanced', random_state=42, n_jobs=-1))\n",
    "    ])),\n",
    "    ('tfidf_svm', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=10000, ngram_range=(1, 3))),\n",
    "        ('svm', SVC(class_weight='balanced', probability=True, random_state=42))\n",
    "    ])),\n",
    "    ('tfidf_lr', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=10000, ngram_range=(1, 3))),\n",
    "        ('lr', LogisticRegression(class_weight='balanced', max_iter=1000, random_state=42))\n",
    "    ])),\n",
    "    ('tfidf_nb', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=10000, ngram_range=(1, 3))),\n",
    "        ('nb', MultinomialNB())\n",
    "    ]))\n",
    "]\n",
    "\n",
    "# 4. 数据集拆分\n",
    "X = df['processed_text']\n",
    "y = df['label']\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n",
    "\n",
    "# 5. 模型训练与评估\n",
    "results = []\n",
    "model_names = []\n",
    "f1_scores = []\n",
    "\n",
    "for name, pipeline in pipelines:\n",
    "    print(f\"\\n训练模型: {name}\")\n",
    "    \n",
    "    # 简化参数搜索以加快速度\n",
    "    if 'rf' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [5000, 10000],\n",
    "            'rf__n_estimators': [100, 200, 300],\n",
    "            'rf__max_depth': [None, 10, 20, 30],\n",
    "            'rf__min_samples_split': [2, 5, 10],\n",
    "            'rf__min_samples_leaf': [1, 2, 4],\n",
    "            'rf__max_features': ['sqrt', 'log2']\n",
    "        }\n",
    "    elif 'svm' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [5000, 10000],\n",
    "            'svm__C': [0.1, 1, 10],\n",
    "            'svm__gamma': ['scale', 'auto'],\n",
    "            'svm__kernel': ['linear', 'rbf']\n",
    "        }\n",
    "    elif 'lr' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [5000, 10000],\n",
    "            'lr__C': [0.1, 1, 10],\n",
    "            'lr__penalty': ['l1', 'l2'],\n",
    "            'lr__solver': ['liblinear', 'saga']\n",
    "        }\n",
    "    elif 'nb' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [5000, 10000],\n",
    "            'nb__alpha': [0.1, 0.5, 1.0]\n",
    "        }\n",
    "    \n",
    "    random_search = RandomizedSearchCV(\n",
    "        estimator=pipeline,\n",
    "        param_distributions=param_dist,\n",
    "        n_iter=20,\n",
    "        cv=5,\n",
    "        scoring='f1_weighted',\n",
    "        n_jobs=-1,\n",
    "        verbose=1,\n",
    "        random_state=42\n",
    "    )\n",
    "    \n",
    "    try:\n",
    "        random_search.fit(X_train, y_train)\n",
    "        \n",
    "        # 评估模型\n",
    "        y_pred = random_search.predict(X_test)\n",
    "        f1 = f1_score(y_test, y_pred, average='weighted')\n",
    "        \n",
    "        results.append({\n",
    "            'model': name,\n",
    "            'best_params': random_search.best_params_,\n",
    "            'f1_score': f1\n",
    "        })\n",
    "        \n",
    "        model_names.append(name)\n",
    "        f1_scores.append(f1)\n",
    "        \n",
    "        print(f\"{name} 最佳参数: {random_search.best_params_}\")\n",
    "        print(f\"{name} 测试集F1分数: {f1:.4f}\")\n",
    "    except Exception as e:\n",
    "        print(f\"训练 {name} 模型时出错: {e}\")\n",
    "        continue\n",
    "\n",
    "# 6. 可视化比较\n",
    "plt.figure(figsize=(10, 6))\n",
    "sns.barplot(x=f1_scores, y=model_names, palette='viridis')\n",
    "plt.title('不同模型的F1分数比较')\n",
    "plt.xlabel('加权F1分数')\n",
    "plt.ylabel('模型')\n",
    "plt.xlim(0, 1)\n",
    "plt.show()\n",
    "\n",
    "# 7. 选择最佳模型\n",
    "if results:\n",
    "    best_model_info = max(results, key=lambda x: x['f1_score'])\n",
    "    print(f\"\\n最佳模型: {best_model_info['model']}\")\n",
    "    print(f\"最佳F1分数: {best_model_info['f1_score']:.4f}\")\n",
    "    print(f\"最佳参数: {best_model_info['best_params']}\")\n",
    "else:\n",
    "    print(\"没有成功训练任何模型，请检查数据和参数设置\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "5f452c17-e156-4796-9bb0-19ade3700159",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "训练模型: tfidf_rf\n",
      "Fitting 5 folds for each of 20 candidates, totalling 100 fits\n",
      "tfidf_rf 最佳参数: {'tfidf__max_features': 10000, 'rf__n_estimators': 200, 'rf__min_samples_split': 5, 'rf__min_samples_leaf': 1, 'rf__max_features': 'sqrt', 'rf__max_depth': None}\n",
      "tfidf_rf 测试集F1分数: 0.6744\n",
      "\n",
      "分类报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "    positive       0.93      0.65      0.77        84\n",
      "     neutral       0.57      0.91      0.70        64\n",
      "    negative       0.46      0.23      0.31        26\n",
      "\n",
      "    accuracy                           0.68       174\n",
      "   macro avg       0.65      0.60      0.59       174\n",
      "weighted avg       0.73      0.68      0.67       174\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnoAAAIgCAYAAAASv8SdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABXPUlEQVR4nO3deZzNdf//8eeZ3SzGMJbMWAZJDComS4sl4QqZaLFcSNZUXMmSpSRl7FG+cakYKkldlBQhu6wRBmUZ+05jZsyYM9vn94efc3WuIXMwfWY+53G/bp/brfM+n8/7vM65net4zeu9fGyGYRgCAACA5XiYHQAAAADyBokeAACARZHoAQAAWBSJHgAAgEWR6AEAAFgUiR4AAIBFkegBAABYFIkeAACARZHoAQAAWBSJHoAC68SJEzp79uxt9ZGenq7k5GSntrVr1+rcuXNObUePHtUrr7yiCxcu5Ohj9+7devvtt3XmzJnbiuVG5syZo7i4uDzpG4C12bgFGoCCql27dtqwYYMWLVqk+++/X23bttXChQvl4ZHzb9js7Gz17NlT06dPd2p/8cUXtWLFCs2fP1/333+/srKy1KxZM61fv15t27ZVnz59FB8fr3/961966KGHNGrUKNWsWdOpj0mTJundd9/V/v37VaxYMUf7nDlzFB8fnyOW9PR0RUREqEePHsrIyNCQIUOcnn/44YcVHR3tODcwMFDdu3fXhx9+eKsfFQA3RUUPKKAyMzPVu3dvFS1aVIUKFVKPHj1ynGOz2bR69eqb9rV69WrZbLYc7SdPnlTz5s0VEBCgIkWK6JNPPrkTod+x15g5c6aqV6+uhg0bav369fL19VXPnj2VmZmZ4+jcubN8fX1z9DFkyBD5+/urXr16WrRokTw9PbVixQr9/vvvysrK0sMPP6zOnTurefPmmjdvXo4kT5J+/PFH9ezZ05HkZWZmKiMjQ19++aXmzZunEydOOB2nT5/WxYsXJUmGYWjixIlKSEiQzWbTxIkT5e3trRMnTujcuXP68ccflZWVpRdffFGXLl3SpUuXdOHCBZ08eVL8nQ7gZrzMDgBATkeOHFFsbKzeeuutG57z8ccfa+HChZo3b54Mw9Dp06dznLN161bdc889txzHa6+9ptTUVC1dulQXL16Un5/fLfeVF6/h7++vBQsWqFWrVipcuLB8fHyUkpKiEydO5Dg3NTVVoaGhOdrLli2r9evX680339Sjjz4qSdq3b58mT56slStXavz48QoLC9P48eN11113qXfv3urfv79KliwpSTp//rxWrVqlZcuWacyYMY5+x48fr8DAQD388MP6+OOPb/gefHx8JEmdOnWS3W7XzJkz1bRpU0f7NTVq1MhxbXJysgIDA3PxSQFwVyR6QD505MgRjRw58i8Tve3bt+uxxx5T06ZNb3hO7dq1byuO7du3a8CAAXrkkUduq5+8eo309HT5+flp2bJljorkZ599ps8+++y657/22mvXbQ8KCtJ7772nlJQUPf7449q8ebN69eql//znP0pOTlajRo3Uvn17LVy4UGPGjFHHjh0did7MmTNVtWpVzZs3T/fee69mzZqlsmXLqmzZsrmeV+fp6SnpamU1Ojpa3t7eOn/+vNLS0nT33Xdr0aJFTp9Pdna27Ha7AgICcv1ZAXBPDN0CBVR6enqOqo87vcbixYt11113aejQoY5FEBkZGerVq5cMw8hxdOnSRZmZmU59vPPOO+rVq5fOnz/vuH7UqFH69ddfNWzYME2aNEmDBg1SamqqLl26pEaNGmnp0qUqXry4UlJSlJiYqHHjxql3796qUqWKJKlSpUpq3LixKlWqJOlqJfF/h25vtGhj2bJlat26tSQpNDRU3377rapUqaLHH39ca9eu1eHDh+Xn5yd/f3+FhIRcd7gdAJwYAPKNESNGGJJyHF26dHGcU65cueues2rVqhz93ah9//79RsOGDQ1fX1+jevXqxqRJk4xrPweHDx++bv+u/lyMGDHCaNCggXHp0iXjxRdfNEqVKmX89NNPd/Q1vvnmG6NIkSJGmzZtDMMwjLZt296wX0lG7969na5fuHChUbZsWaNIkSLGV199ZfTr18+QZHh4eBgeHh6GJMPT09PpuNY+a9YsIyUlxfj888+NpKQkx+e9bt06R/9dunS5bhzVqlVzisPT09NYsGCBYbPZjOPHjxuGYRipqalG+fLljblz5xqGYRiVKlUy3n77bZc+HwBg6BbIR3r27KmWLVvql19+Ue/evbV161ZJcppb9t1338lut2vkyJGSpBEjRkhSrufiZWVlKTo6Wp6enlqwYIHi4+M1ePBgx/OlS5d2vO6TTz7piOlWpKen67HHHlOpUqU0bNgwVa5c+Y6+RuvWrbV161bHEOZnn32m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67hf8jX+/v6OBG7VqlVq0aKFAgMDZbPZJF1N8lJSUrRixQo1bNhQkhQfH69BgwapbNmyatasmapVq6Z69eqpXLlyOnv2rN555x0NGTJERYoUUbNmzfTJJ5/k2ecFAH8nEj0AtyUtLU2jRo3SoUOHNHLkSEeSJ129P3OlSpVyXPPUU0+pTp06uuuuu1SoUCG9//77OnbsmDZt2qT169dr2bJlWr9+verUqeO45ty5c0pMTFRiYqLsdrv279+vqKiomw4Hb9q0Sc8++6z69Omj/v37q3Tp0lqyZIlOnTqlJk2aaOPGjfL19dXjjz+ugwcPysuLn0UA1sEvGoDbtnv3bv3888+aM2eOpKvJVffu3XXhwgVlZWVp48aNkqS+ffvq6aef1uLFi9W5c2fH9SdPnlTt2rU1depUSZKnp6fTsKskrVixQqtXr9Y333yjcuXKKTk5WT169FDdunWvG1NWVpY8PT1VsWJFvfvuu+rUqZMk6dChQ1qwYIEGDRqk2bNnKzIyUpI0c+ZMeXgwbRmAtfCrBuCWZWVlyWaz6T//+Y9eeOEFpaenS7q68CE0NFRnzpzRypUrtXnzZrVs2VLJyck6f/683nrrLfXp08exYMPPz09FihT5y9fq0KGDpk+fLrvdrhYtWmjSpEnq1auXgoODFRoaquDgYBUuXFihoaEqXLiwypYtK0kqXry4I8lLTU3VxIkTNXLkSH300UcaNWqU3nnnHaWkpKhx48YkegAsh181ALdsx44dioyMVNWqVfX++++rbt26stlsjnl7ktS0aVMdOnRI0tVK3T333KMNGzbI39/fkVgZhqFChQrd9PV++uknJSUl6dNPP1WXLl20fft2JSYm6sKFCxo4cKD69OmjCxcuKCkpyRGDYRjauXOnRowYoUqVKuns2bPasWOH2rZtq3Xr1snX11dRUVEaMGCAVq1apfPnz+fBJwUA5iDRA3DLateurQMHDui7775TpUqVtGDBAkVERKhcuXKOc9LS0lSxYkWn6+666y71799fNptN2dnZunDhgooVKyZJf7mdyvvvv6+KFSuqbdu22rhxo9asWaNFixY5JZb79+93DBVL0qRJk1SvXj2dOHFCffr00bx583T33XcrNDRUYWFheuuttxQREaEHHnhAU6ZM0fPPPy82IwBgFczRA3DHlCpVSosWLVJycrIkKTExUb6+vgoICJDknMQ9++yz6tmzp65cuaKDBw+qdOnSkqT09PTr7p+3ePFibd++XT169JAkzZs3T/fdd58qVqzomBsoSQsWLNCMGTMUFxcnf39/vfLKK+revbuCg4OVnp6u4cOH6+jRo4qPj1ejRo0kSf/+97/18MMPq0OHDnn34QCACajoAbhjChcurMjISMdK2G3btikiIsLxfFpamiRp586d2rNnj1q3bq3ffvtNS5cuVa1atdS0aVPNmDFDmZmZjvl+18yYMUMfffSRY8+8Ro0aaeXKlSpVqpRatGjhOO+1116Tn5+fRo0aJUny8fFRcHCwzp07p8jISGVkZOjkyZMaNGiQpKsLQfr27auMjIy8+2AAwCQkegDuuBo1amjixImaMWOGmjdvrgULFqhfv37q1auXJGn06NHq27evgoOD5efnp6+++kpBQUF66KGHdPnyZT3zzDMaN26cU58LFizQE0884XicmZmpESNG6NVXX3XsoSdJ3t7eGjZsmKZNm6bExERHe4kSJRQZGamFCxeqTp06+v3335WcnKyvv/5arVu3zjG8DABWQKIH4LYkJibq2LFjTvvPBQcHa8GCBdqxY4f69u2rb775Rs8995zS09O1dOlSfffdd+rbt68kacCAAWrZsqX69u2rRx99VF27dlWRIkVUunRpRwVQkqP/jIwMZWVlKS0tTR07dlS7du307bffat26dY4FHc8995zi4uIUHBws6b9DxsOGDVPVqlXl6empFStWyNfXV5988om6desm6WryCABWwhw9ALdlwoQJmj17tmMo9JdfflG3bt1UsmRJbdiwQSEhIZozZ46mT5+uevXqafbs2Ro6dKiKFSumOXPmaMWKFfrll18kXb3lWZcuXZSYmKhJkyZpzJgxGjt2rNPr2e12ZWRkKDAwUEOGDJEkjR07VkWKFFHHjh0lXU0Kw8PDHdf4+PgoMDDwupshp6WlqX379rLb7bLb7bpw4cJNt3oBgIKCe90CuKOys7O1adMm1a9fP8dzx48fV5kyZRyPDcPQqVOnFBYWluPcM2fOyG63O63gBQC4hkQPAADAopijBwAAYFEkegAAABZFogcAAGBRJHoAAAAWRaIHAABgUSR6AAAAFkWiBwAAYFEkegAAABb1/wCxfzfddjw9xAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "训练模型: tfidf_svm\n",
      "Fitting 5 folds for each of 20 candidates, totalling 100 fits\n",
      "tfidf_svm 最佳参数: {'tfidf__max_features': 5000, 'svm__kernel': 'linear', 'svm__gamma': 'scale', 'svm__C': 1}\n",
      "tfidf_svm 测试集F1分数: 0.6913\n",
      "\n",
      "分类报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "    positive       0.89      0.67      0.76        84\n",
      "     neutral       0.60      0.88      0.71        64\n",
      "    negative       0.50      0.35      0.41        26\n",
      "\n",
      "    accuracy                           0.70       174\n",
      "   macro avg       0.66      0.63      0.63       174\n",
      "weighted avg       0.73      0.70      0.69       174\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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GYah2267Tf7+/mrZsqWOHz+uuLg4xcTEKCAgQJJUt25d7d2716W3R6IHAACQD8aNG6egoCCnY9y4cbnO27dvn2rXrq3PP/9ce/fulbe3t55++mmlpKQoMjLScZ7NZpOnp6eSkpLyHIPpiV5mZqbGjh2rhg0bKiwsTHv27NGdd96pQ4cOmR0aAACwunwcuh02bJiSk5OdjmHDhuUKoWvXrtq6dauio6MVGRmpadOmadWqVcrJyZGvr6/TuX5+fkpLS8vz2zM90evfv7/++9//qlevXkpNTVVAQIBiYmL09NNPmx0aAADADfP19VVgYKDT8b+J29UEBwcrJydHZcqUUWJiotNzqamp8vHxyXMMpid6ixYt0qJFi9S3b195enrK09NTgwYN0o8//mh2aAAAwOrycY5eXg0aNEgLFixwPP7555/l4eGhOnXqaOvWrY72o0ePym63q0SJEnnu2/REr3z58tq4caNT28GDB53GpAEAAKzqtttu0/Dhw7Vx40atXbtWzz//vHr06KHmzZsrOTlZ8+bNkySNHz9ezZo1k6enZ577Nv0WaBMnTlS7du304YcfKi0tTYMHD9amTZs0d+5cs0MDAABW5+LGxvmhW7du2rdvn9q2batixYrpkUce0dixY+Xl5aWZM2eqS5cuGjJkiLKzs7VhwwaX+rYZrm6xnA8OHTqk+fPnKz4+XuHh4ercufMNVfT8b38uH6IDbtyMfw81OwQglwerlzE7BMBJqWLepr22/yP/ybe+L3/Z+5b0Ex8fr23btqlx48YqWbKkS9eaXtHLyclR5cqVNXz4cLNDAQAA7saFuXRmCQsLU1hY2A1da3q9slSpUurVq5e++eYbZWZmmh0OAABwI3+9v+ytPgoC0xO99evXq2bNmpo0aZLCw8P1xBNP6Msvv1R6errZoQEAABRqpg/dRkVFKSoqSoMHD1ZaWprWrl2rTz75RE8++aQuXrxodngAAMDCCkrlLb+Ynuj9afv27VqxYoW++eYbJScn64UXXjA7JAAAgELN9ESvW7duWrVqlUqVKqUOHTpo5syZioqKMjssAADgDqxd0DM/0atRo4ZGjBihatWqmR0KAACApZie6L366qtmhwAAANyU1efomb7qFgAAAPnD9IoeAACAWaxe0TMl0atUqZJ27typokWLKjIy8pof8uHDh//hyAAAAKzDlERv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//79Wr169XX7ioyMzNMHcPjw4byGBwAAgP+R50QvIyNDW7Zs0ciRIzVhwgS9+OKLatKkiXJyclSpUiVNmTJFDRs2lIfH9YuEc+bMuZmYAQAAbomCsg1KfslzopeUlKTdu3crPDxchw4d0v79+zVo0CBdunRJ5cuXV7ly5bR48WLVrFnzun01adLkpoIGAADA9eVpjt7GjRv14IMPKjIyUvHx8SpVqpRGjx6t1atX67XXXlNmZqZq1aql+fPny26353fMAAAAt4TV5+jlKdG76667NHnyZJ05c0aTJ0+WJPn7+6tPnz46cuSIvL299f3332vRokWqX7++srKybjowVu4CAID8ZsvHoyDI09Ctp6enevbsqSZNmig2NlaVK1dW165d9cgjj+iuu+7SpEmTVLJkSUmSYRhKTU3NcwCnT5/WG2+8of379ys7O9vRx2+//abTp0/fwFsCAAAofM6fP6/ff/9d1apVU2ho6C3p06U7Y1SqVEkLFixQixYtJEn16tXT66+/Ln9/f8c5NpvNsddeXjzxxBNKSEiQv7+//P391bFjR/3+++965plnXAkNAADAZR42W74drpg/f76qVKmiZ599VhUqVND8+fMlXbndbHR0tIoXL64hQ4bIMAzX3p9LZ0tq2LChU5Y5aNAgx/1uXank/emnn37S+++/r8GDBys5OVnPPPOMZs2apZUrV7rcFwAAQGFz4cIFPf/889q0aZN27NihDz/8UEOHDpXdbtfDDz+sBg0aaNu2bdq7d6/LO5fkOdHLycnRxo0bHX8uX76847n09HS9+uqrioiI0KlTp1wKoFy5cvruu+8UHR2tPXv26PLly4qKitKuXbtc6gcAAMBVNlv+HXmVmpqqyZMnKyoqStKVEdOkpCStWLFCycnJmjRpkipXrqyxY8dq1qxZLr2/PG+vkpOTo2bNmikjI0MeHh5KSUmRJG3dulVdu3aVn5+fpk2bpjJlyrgUwLhx49S1a1c1b95c7dq1U506dSRdWQACAABQWNnt9ly7kfj6+srX19eprXz58urataskKTMzU2+//bbat2+vuLg4xcTEKCAgQJJUt25d7d2716UY8lzR8/LycrzQn4FKUkhIiPr27audO3eqS5cuedow+a/at2+vU6dOqUSJEpo5c6b+9a9/aeDAgVq4cKFL/QAAALgqP7dXGTdunIKCgpyO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tHbtWv34449q3bq1UlNTlZiYqFGjRql///6OBRt+fn4KDg7+29fq0qWLZsyYIbvdrlatWmnSpEl6+umnFRQUpNDQUAUFBSkwMFChoaEKDAxUhQoVJEklS5Z0JHlpaWl65513NHr0aP373//WmDFj9MYbb+jSpUu67777SPQAWA4/1QDcsB07digqKkq1atXSe++9p5iYGNlsNse8PUlq3ry5Dh06JOlKpa569eravHmzAgICHImVYRjy9/e/7uutWbNGKSkp+vjjj9W9e3f98ssvSk5O1rlz5zRkyBD1799f586dU0pKiiMGwzAUFxenkSNHqkqVKkpISNCOHTvUoUMHbdq0Sb6+voqOjtbgwYO1bt06JSYm5sMnBQDmINEDcMPuuOMOHThwQEuXLlWVKlW0ePFiRUZGKiIiwnFOenq6Kleu7HRd2bJlNWjQINlsNuXk5OjcuXMKCQmRpL/dTuW9995T5cqV1aFDB23ZskUbNmzQ119/7ZRY7t+/3zFULEmTJk1So0aNdPLkSfXv31/z589X1apVFRoaqrCwMI0aNUqRkZGqX7++pkyZoh49eojNCABYBXP0ANwyZcqU0ddff63U1FRJUnJysnx9fVWkSBFJzkncY489pr59++ry5cs6ePCgypUrJ0nKyMi46v55y5Yt0y+//KI+ffpIkubPn6/bbrtNlStXdswNlKTFixdr5syZ2r17twICAvT888+rd+/eCgoKUkZGhkaMGKFjx47p8OHDio2NlSR9+OGHuvvuu9WlS5f8+3AAwARU9ADcMoGBgYqKinKshN22bZsiIyMdz6enp0uS4uLitGfPHrVt21a//fabVq5cqQYNGqh58+aaOXOmsrKyHPP9/jRz5kz9+9//duyZFxsbq7Vr16pMmTJq1aqV47yXXnpJfn5+GjNmjCTJx8dHQUFBOnv2rKKiopSZman4+Hi9/PLLkq4sBBkwYIAyMzPz74MBAJOQ6AG45erWrat33nlHM2fOVMuWLbV48WK98MILevrppyVJY8eO1YABAxQUFCQ/Pz8tXLhQxYoV01133aWLFy+qY8eOmjhxolOfixcv1kMPPeR4nJWVpZEjR2rgwIGOPfQkydvbW8OHD9f06dOVnJzsaC9VqpSioqL05ZdfqmHDhvr999+VmpqqRYsWqW3btrmGlwHACkj0ANyU5ORkHT9+3Gn/uaCgIC1evFg7duzQgAED9NVXX+nxxx9XRkaGVq5cqaVLl2rAgAGSpMGDB6t169YaMGCA7r33XvXs2VPBwcEqV66cowIoydF/ZmamsrOzlZ6erq5du6pTp05asmSJNm3a5FjQ8fjjj2v37t0KCgqS9H9DxsOHD1etWrXk6emp7777Tr6+vpo1a5Z69eol6UryCABWwhw9ADfl7bff1ty5cx1Dodu3b1evXr1UunRpbd68WcWLF9e8efM0Y8YMNWrUSHPnztWrr76qkJAQzZs3T9999522b98u6cotz7p3767k5GRNmjRJ48eP14QJE5xez263KzMzU0WLFtWwYcMkSRMmTFBwcLC6du0q6UpSGB4e7rjGx8dHRYsWvepmyOnp6ercubPsdrvsdrvOnTt33a1eAKCw4F63AG6pnJwcbd26VY0bN8713IkTJ1S+fHnHY8MwdOrUKYWFheU698yZM7Lb7U4reAEAriHRAwAAsCjm6AEAAFgUiR4AAIBFkegBAABYFIkeAACARZHoAQAAWBSJHgAAgEWR6AEAAFgUiR4AAIBF/T+fZJZVcNW2tAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "训练模型: tfidf_lr\n",
      "Fitting 5 folds for each of 20 candidates, totalling 100 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\17828\\AppData\\Roaming\\Python\\Python312\\site-packages\\sklearn\\svm\\_base.py:1249: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tfidf_lr 最佳参数: {'tfidf__max_features': 5000, 'lr__solver': 'liblinear', 'lr__penalty': 'l1', 'lr__C': 10}\n",
      "tfidf_lr 测试集F1分数: 0.6847\n",
      "\n",
      "分类报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "    positive       0.88      0.71      0.79        84\n",
      "     neutral       0.59      0.89      0.71        64\n",
      "    negative       0.50      0.19      0.28        26\n",
      "\n",
      "    accuracy                           0.70       174\n",
      "   macro avg       0.66      0.60      0.59       174\n",
      "weighted avg       0.72      0.70      0.68       174\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnoAAAIgCAYAAAASv8SdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABY10lEQVR4nO3de3zO9f/H8ee1sxnbMGQTQ3KYqbQsKpRQTotvB3wjOSSKEpVUSDlVQr4pHYxK6ltyyqlyCDkfxlCEkWE2zTZm106f3x9+rm9Xo3ZhPtvnetx/t8/t1vW+Pp/39bqu7/W7vPZ6Hz42wzAMAQAAwHI8zA4AAAAARYNEDwAAwKJI9AAAACyKRA8AAMCiSPQAAAAsikQPAADAokj0AAAALIpEDwAAwKJI9AAAACyKRA9AiZWWlqb9+/dfUR+GYejUqVNObVu2bFFCQoJT2x9//KGnnnpKhw8fLtBHUlKSXnjhBR04cOCKYrmUb775Rps2bSqSvgFYm5fZAQDA5Ro7dqw++OADffXVV7r33nv13HPP6Z133pGHR8G/YfPz89WqVSstXbrUqX3ChAl655139Nlnn6lly5aSpClTpujLL79Uq1atNGDAAOXn56tfv36qVq2aDh8+rGrVqjn1sW7dOr3zzjvq1auXU/uCBQu0bdu2ArHk5OQoMDBQzz//vCRp5MiROnPmjOP5+vXrq2fPno7HgwcPVv369bV48WIXPyEA7o6KHlBC5ebmql+/fipXrpxKlSqlPn36FDjHZrNp1apV/9jXqlWrZLPZCrQnJiaqTZs2Kl26tIKCgvTxxx+7HGfz5s01cuRIl68rjNdff12dOnVS27Zt9fXXX8vX11etWrVSbm5ugePVV1+Vr69vgT769u2revXqqXXr1po2bZokadasWTp69Khq1Kih++67T23btlWtWrW0YMEC3XXXXQX6WLZsmTp37qzatWtLkvLy8pSdna1ly5bpww8/1NGjR52O48eP6+TJk47rp0+frkOHDikwMFDvvPOOMjMzdfz4cSUlJWnHjh06cuSInn76aZ0+fVqnT5/WqVOndOzYMeXk5BTJ5wrAOqjoAcVQQkKCYmNj/zZB+uijj/Ttt99qzpw5MgxDx48fL3DO5s2bdeONN152HM8995wyMzO1dOlSnTp1Sn5+fpfdV1Hw8vLShx9+qMzMTAUEBMjHx0d2u11Hjx4tcG56erq8vb0LtAcHB2vZsmV6+eWX1bZtW0nSkSNHNHXqVH3++ecaNmyYoqOjNXHiRFWpUkU9evTQ888/rxo1akg6X5379ttvlZycrDlz5jj6HTBggAICAlS3bl199NFHf/s+fHx81L59e91+++0aNWqUHnroIUVFRTkNE99///0Frtu1a5ciIiIK92EBcEskekAxlJCQoFGjRv1tordt2zbdc889atWq1SXPufXWW68ojm3btmnIkCG68847r6ifopKdnS0fHx/Nnj1bNptNGzZs0KpVq1S1atWLnt+5c+eLtnt7e2v8+PHKzc1Vt27d9O2336pbt26aP3++UlJSdNddd6lDhw5avXq1hg8froMHDzoSvblz58pms2nPnj1q2bKlnnrqKTVp0kTlypXTN998U6j34eV1/qd41apVatasmUJCQrRt2zZ5eHiofv36GjVqlP797387zjcMQ3a7XWXKlHHl4wLghhi6BUqoC0lOSX+Ny7Vjxw5VrFhRAwYMcCyCyMnJUevWrWUYRoFjxIgRys3Ndepj1qxZevDBBx0LL7KysjR06FBt3rxZb775pr766is98cQTysjI0OnTp9WwYUMtXLhQERERSktLcwwJ9+zZU3Xr1pW3t7eqVq2qZs2aqUGDBpLkqDD++UhMTLzoe1q+fLk6duwoSSpXrpzWrVunvLw8Pfroo9qyZYt2794tPz8/lSpVSkFBQfL09CyiTxeAVZDoAcXIyJEjZbPZ1KJFC0nn59jZbDY99thjjnOqV68um82mmTNnaubMmY5zLjYX71Lt+/fvV4sWLeTn56fIyEht377d8VxCQoKjz8OHD6tnz56Ox1fThde5MEwdGRlZYDHD37npppu0ePFiLViwQF26dHFUuZYtW+aI98/HqFGjZLfbnfoIDw/X3r17Va9ePU2dOlUfffSRbr75ZjVo0EDly5fXlClTlJKSovDwcFWoUMFxXHfddXrnnXdkGIYmTJig/v37XzLOtWvXqmrVqk7HxYbTDcPQypUrdcsttzgev/766xo0aJB8fX01atQovffee4X+fABAYugWKFb69u2rdu3aaevWrerXr582b94sSapQoYLjnIULF8put2vUqFGSpBEjRkhSoefi5eXlKSYmRp6enpo7d64OHjyoF154wfF8lSpVHK/boUMHR0xF5e2339Z3332n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bGysYmNj2TgWAK6yV155RUePHtUbb7whHx8fff/993rqqad06tQps0MDrhhz9AAAbi0mJkYDBgxQ7dq1lZubq9q1a+v99983OyzgqqCiBwAAYFEsxgAAALAoEj0AAACLItEDAACwKBI9AAAAiyLRA3DV2e32AreJMgxDdrvdpX4Mw7hqdwXIzc3V6tWrC/T366+/6uzZs1flNQCguGHVLYArEhoaqjJlysjPz09paWl68MEHlZiYqO3btys7O1uJiYm68cYblZ+fr+zsbO3Zs0cxMTHq06eP2rdvr9WrVzvdaaBSpUqqW7euJGnSpEnauHGjvvjiC8fzL7/8srKzszVhwgTl5eUpJydHfn5+TjHl5OTIw8NDnp6ejrYZM2Zo0KBBWrJkiYKDg+Xj46Pq1aurTp06GjRokJ5++mkZhqHc3NwC988FgJKKffQAXJHExERJUkJCgm677Tb16NFD9evXlyQtXrxYb775plauXOl0Tc+ePdW9e3fNnTtX7dq1U5cuXSRJ+/fvV40aNfTaa68pNTVVvr6+jvslX+Dv7+9I4FauXKm2bdsqICBANptN0vkk7+zZs/rhhx/UvHlzSdLBgwf1/PPP6/rrr1fr1q1Vv3593X777apWrZqSkpL0+uuva9iwYQoKClLr1q318ccfF9nnBQDXEokegCuSlZWl0aNH68CBAxo1apQjyZPO35+5Vq1aBa554IEH1LhxY1133XUqVaqUpkyZoiNHjmjDhg1au3atli9frrVr16px48aOa06ePKm0tDSlpaXJbrdr3759ioqK+sfh4A0bNuihhx5S//79NXjwYFWpUkVLlizRsWPH1LJlS61fv16+vr6699579dtvv8nLi59FANbBLxqAK7Zr1y79/PPPmjVrlqTzyVXv3r2VkpKivLw8rV+/XpI0cOBA/etf/9KiRYvUvXt3x/WJiYm69dZbNXXqVEmSp6en07CrJP3www9atWqV5s2bp2rVqikjI0N9+vRRdHT0RWPKy8uTp6enatasqTfeeEOPPvqoJOnAgQOaO3eunn/+ec2cOVMRERGSpE8++UQeHkxbBmAt/KoBuGx5eXmy2Wz65ptv9Pjjjys7O1vS+YUPFSpU0IkTJ7RixQpt3LhR7dq1U0ZGhpKTkzVy5Ej179/fsWDDz89PQUFBf/taXbt21fvvvy+73a62bdtq4sSJeuKJJxQYGKgKFSooMDBQZcuWVYUKFVS2bFldf/31kqSQkBBHkpeZmam3335bo0aN0ocffqjRo0fr9ddf19mzZ3X33XeT6AGwHH7VAFy27du3KyIiQvXq1dOUKVMUHR0tm83mmLcnSa1atdKBAwckna/U3XjjjVq3bp38/f0diZVhGCpVqtQ/vt6PP/6o9PR0ffrpp+rRo4e2bdumtLQ0paSkaOjQoerfv79SUlKUnp7uiMEwDMXFxWnEiBGqVauWkpKStH37dnXu3Flr1qyRr6+voqKiNGTIEK1cuVLJyclF8EkBgDlI9ABctltvvVX79+/XwoULVatWLc2dO1fh4eGqVq2a45ysrCzVrFnT6brrrrtOgwcPls1mU35+vlJSUlS+fHlJ+tvtVKZMmaKaNWuqc+fOWr9+vVavXq0FCxY4JZb79u1zDBVL0sSJE3X77bfr6NGj6t+/v+bMmaMbbrhBFSpUUGhoqEaOHKnw8HDdcsstmjx5sh577DGxGQEAq2COHoCrpnLlylqwYIEyMjIkSWlpafL19VXp0qUlOSdxDz30kPr27atz587pt99+U5UqVSRJ2dnZF90/b9GiRdq2bZv69OkjSZozZ45uuukm1axZ0zE3UJLmzp2r6dOnKz4+Xv7+/nr66afVu3dvBQYGKjs7Wy+//LIOHz6sgwcPqkWLFpKkDz74QHfccYe6du1adB8OAJiAih6Aq6Zs2bKKiIhwrITdsmWLwsPDHc9nZWVJkuLi4rR792517NhRv/zyi5YuXapGjRqpVatWmj59unJzcx3z/S6YPn26PvzwQ8eeeS1atNCKFStUuXJltW3b1nHec889Jz8/P40ePVqS5OPjo8DAQJ08eVIRERHKyclRYmKinn/+eUnnF4IMHDhQOTk5RffBAIBJSPQAXHWRkZF6++23NX36dLVp00Zz587VoEGD9MQTT0iSxowZo4EDByowMFB+fn7673//qzJlyqhp06Y6c+aMHnzwQU2YMMGpz7lz5+r+++93PM7NzdWIESP07LPPOvbQkyRvb28NHz5c06ZNU1pamqO9YsWKioiI0LfffqvGjRvr119/VUZGhr7++mt17NixwPAyAFgBiR6AK5KWlqYjR4447T8XGBiouXPnavv27Ro4cKDmzZunhx9+WNnZ2Vq6dKkWLlyogQMHSpKGDBmidu3aaeDAgbrrrrvUs2dPBQUFqUqVKo4KoCRH/zk5OcrLy1NWVpa6deumRx55RPPnz9eaNWscCzoefvhhxcfHKzAwUNL/hoyHDx+uevXqydPTUz/88IN8fX318ccfq1evXpLOJ48AYCXM0QNwRd566y3NnDnTMRS6detW9erVS5UqVdK6desUHBysWbNm6f3339ftt9+umTNn6qWXXlL58uU1a9Ys/fDDD9q6dauk87c869Gjh9LS0jRx4kSNGzdO48ePd3o9u92unJwcBQQEaNiwYZKk8ePHKygoSN26dZN0PikMCwtzXOPj46OAgICLboaclZWlLl26yG63y263KyUl5R+3egGAkoJ73QK4qvLz87VhwwY1adKkwHO///67qlat6nhsGIaOHTum0NDQAueeOHFCdrvdaQUvAMA1JHoAAAAWxRw9AAAAiyLRAwAAsCgSPQAAAIsi0QMAALAoEj0AAACLItEDAACwKBI9AAAAiyLRAwAAsKj/A6GTgbAEeVuaAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 800x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "训练模型: tfidf_nb\n",
      "Fitting 5 folds for each of 6 candidates, totalling 30 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\17828\\AppData\\Roaming\\Python\\Python312\\site-packages\\sklearn\\model_selection\\_search.py:317: UserWarning: The total space of parameters 6 is smaller than n_iter=20. Running 6 iterations. For exhaustive searches, use GridSearchCV.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tfidf_nb 最佳参数: {'tfidf__max_features': 5000, 'nb__alpha': 0.1}\n",
      "tfidf_nb 测试集F1分数: 0.5764\n",
      "\n",
      "分类报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "    positive       0.58      0.87      0.70        84\n",
      "     neutral       0.65      0.44      0.52        64\n",
      "    negative       0.83      0.19      0.31        26\n",
      "\n",
      "    accuracy                           0.61       174\n",
      "   macro avg       0.69      0.50      0.51       174\n",
      "weighted avg       0.65      0.61      0.58       174\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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o9544w1NmjTJ2TZr1ixn1ezUnLzatWtr06ZNGj9+fKn96GbNmqVu3bqpRYsWeuedd7Ry5Uo1adJEV111lfbv3+9yPProo6eNo7i4WO+//74uuugi3X777frqq6+czyUlJZVaAXy6eYjh4eH66KOP9MILLygyMlIhISHy9fV1JuXHjx/XPffcI5vNJl9fX1WpUkWLFy8u82cFwDuxGAOogBo3bqzQ0FBNnDhR7dq105o1a3T77berZs2a5913x44d1aBBAz3wwAN68cUXtWPHDr3++usXIGr3Pf30085kbOTIkerWrVupROxMjDF66KGHdPvttysxMdHZJklZWVn6/vvvnXsMDho0SOHh4TLGaMyYMXr00Ud10UUXac+ePVqyZImGDBkiSbrhhhuc/S9fvrxU9a+oqEidOnUqFcvrr7+uzMxM/fLLL5oxY4buvPNOzZs3TyUlJWd9H4WFhZKk0NBQrVu3TtLJLVnatm2roKAgZzUvLi5OKSkp6tatm0pKSnTixAnnFi4AcCYkekAFFBYWpg8//FBDhw7Viy++qEsuuUQ9evS4IH37+/tr7ty5evjhh52b844aNUqjRo26IP27Y+TIkXriiSd0/Phxde7c2a2Ec8KECVq2bJk2btwoSdqyZYvWr1+vZ599Vps2bdL111/vTPSOHTummJgYLVu2TElJSXrwwQclndyLz2azldp02hijli1baunSpS7tzzzzjDIyMlzavvzySw0fPlwPPvigWrdurYSEBGVkZGjixIk6ceLEae/U4XA4lJubq+bNm592vl5YWJjCwsJc2mw2m8LDw1WrVq0yf0YAwKpbAG4pLi42hYWFZzzKsrL1Qvj888/NSy+95Hw8Z84cExYWZkaPHm327NnjjLVx48bG39/f1KxZ0wQEBJiePXsaY4zJysoy4eHh5uqrry7V9/jx402rVq1c2pKSkkytWrXMrbfe6mybN2+e8fHxMW3atDH5+fnO9oMHD5oTJ06YVq1amerVq5c6wsPDzcUXX2yMMWbt2rXOVbd/JTg42EyfPt29DwmA16OiB8AtDzzwgKZPn37G5x955BFNmTKl3OO47bbbXB536tRJ27Ztcy6CkE4uzli7du1pr4+IiNAff/yhn3/+udRzBw8eLNVWs2ZNRUdH65FHHnG23XTTTZo0aZL69OnjskdfVFSUJJWqCJ5O48aN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OVnh4eEuR3JycqnzcnNzNXr0aF166aXavXu3UlJSdP311ys7O1uxsbHO806u8vZVVlZWmWOwJIeeNm2aQkJO/ovS3bFmAACsVrNmTdWsWdPqMHABlOf2KiNGjNDQoUNd2k5XzZs5c6aOHz+u+fPnq1q1ahoxYoSaNm2qd999V3379nU5NygoSHl5eYqMjCxTDJYkem3atDntnwEAADzFmYZp/9fu3bvVqlUrVatWTZLk5+enZs2aKTMzU4cOHXI5NycnRwH/s8XPX2ExBgAA8FoVYdVtnTp1St0OdseOHXr11Ve1dOlSZ1tmZqYcDoczISwLEj0AAAALde7cWevXr9ebb76p3bt367XXXtPKlSvVoUMH2e12zZhxcueL8ePHq3379m6t8rY80du2bZt69eolY4zS09PVrFkzNW3aVL/88ovVoQEAAA9XESp61apV09y5c/Xee++pYcOGmjRpkj7++GM1aNBAqampGjhwoGrWrKnPP/9c48ePd+v9Wbig+aQ+ffooPj5eNptNTzzxhDp37iwfHx8NGjRIq/60KSUAAMAFV0FudZuYmHjaIlf37t21efNmpaenq3Xr1oqKinKrX8sTvT/++EOffPKJcnNztXLlSi1YsECHDh1y7goNAADgzaKjoxUdHX1O11qe6NWtW1effPKJ8vPzdc0118jPz0/z589X3bp1rQ4NAAB4uPLcXqUisDzRmzRpkvr06aOQkBB99NFHmj9/vh588EF98MEHVocGAABQqVme6HXo0EH79u1zPs7Ly9OhQ4dUtWpVC6MCAADegIre32T58uXatWuXLrnkEiUkJFgdDgAAQKVneaK3Z88edevWTZs3b1bt2rW1d+9eNWzYULNmzVLt2rWtDg8AAHgwT6/oWb6P3kMPPaSrr75ahw4d0vr163XgwAFdddVV6t+/v9WhAQAAVGqWV/R+/vlnrVmzxnnftqCgII0aNUrNmjWzODIAAODpqOiVs6ZNm2r69OkubdOnT1d8fLxFEQEAAK9hK8ejArC8ovfGG2+oY8eO+uCDDxQbG6tt27YpJydH8+bNszo0AACASs3yRC8+Pl6bNm3SF198oX379um+++7TLbfcoipVqlgdGgAA8HCePnRreaJ34MABDRw4ULNnz1ZxcbH8/f3VvXt3vf7667rooousDg8AAKDSsnyOXt++fWWM0W+//aYD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v99feIZz+R6WlJSY2rVrm/fee88sWLDAVKlSxWzatMlkZ2eb1atXG19fX/P999+bXbt2mWuuucaMHz/eGGNMdna2ycrKMpLMqlWrTFZWlikoKHCJ53+/48YYM3fuXNOiRQvn40GDBpnnn3/eGGPMTz/9ZAICAszs2bPNmjVrTExMjHnvvffK8RODpyPRqySmTZtmYmJiTElJiTHGmD/++MP4+vqaGTNmmIYNGzrPy8/PN6GhoWbJkiXGGGPq1atnXnzxRZOdnW1KSkpMUVGRS79/9Rde3bp1zYIFC0773Jmua9KkiVm+fLkxxpgbbrjBfP3118YYY5KSkkyrVq2c57355psmISGhTO8dlcOCBQuMJLNy5UpjjDEOh8NIMmlpaaZWrVrO7+7cuXNNVFSUMeavE71TzvQ9bNOmjYmPjy/1F2tBQYHZv3+/OX78uFm0aJHp0qWLueGGG0rFSqLnmc7le3jgwAEjyTgcDmOMMbVq1TK//vqrMcaYEydOmEOHDpljx46ZefPmmcTERPPAAw+4vKYks3379tPGc7pEr6CgwFSvXt3s37/fGGNMXFycWbNmjTHGmH79+pm77rrLee4zzzxj7rjjjvP4RODtmKNXicTExDiHCaKjo1VcXKy9e/cqNjbWeU5gYKBq166tXbt2KTExUR999JGeffZZJScnq3nz5po0aZISEhLKLcbbb79dc+bMUePGjbV69WrddNNNkk7u9v3HH38oIiJCklRUVKSqVauWWxywRmRkpJo3by5JznlJ+/fv16FDhxQZGSlJKikpUU5OjvLz80tdn5eX59brDRw4UP7+/i5txhg988wz+uKLL9S4cWOFh4eruLj4XN4OKil3v4fVq1dXRESElixZopiYGNntdjVo0ECSdOLECT344INatGiRrrzySvn5+Z3398nf319dunTRd999p2uuuUa+vr6Kj4+XdPK3csGCBc7fyoKCApdhXcBdJHqVyM6dO1VSUiIfHx/t3LlTfn5+iomJ0fbt253n5Ofna+/evbrkkkt0/PhxHT9+XN9//70KCgr03HPP6YEHHtCaNWvK9Ho+Pj5uzw257bbbNGDAAF155ZW66aabnPeBjImJ0S233KJXXnlFklRcXOz2X+qo+E63QKeoqEhXX321c+6SMUZ2u13+/v6y2Wwuf2mmp6eXuv6vvodVqlQp1fbhhx9q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",
      "text/plain": [
       "<Figure size 800x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\17828\\AppData\\Local\\Temp\\ipykernel_20680\\2604551088.py:160: FutureWarning: \n",
      "\n",
      "Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.\n",
      "\n",
      "  sns.barplot(x=f1_scores, y=model_names, palette='viridis')\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA38AAAIgCAYAAAA1GNAZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABDFklEQVR4nO3deVxU9eL/8fcAwyYCSoqCuBCuhWZmmViZZVpppVbmkmFlYTezzVzKkqy0NJfK9JYalHq1LCvN3XCrjLxm1s00NVdwYRFQdji/P/w53whUxGHRz+v5eMzjNnPO+czH6TzqvjqbzbIsSwAAAACAS5pLZU8AAAAAAFD+iD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AIDTZWdnKycnR4WFhaXeJi8vTzk5OU6dx2effaZPP/20yGeWZSk6OlqJiYmSpGnTpmn37t0X/F1btmzRa6+9VuKypKQkWZZV7PMjR44oOzv7gr/7fPz9N7YsS+vXr1daWlqpts3OztaXX36p9PT0Ip8fPnxYqampZZpPQkJCqX//jIwMrVy5Urm5ucWW5efna9asWTp58mSZ5gEAJiD+AABOFxUVJU9PT7m6uspms5Xq5e7uruHDh0uSrr322lJvd/p10003FZvHl19+qUWLFkk6FT15eXmy2WwaP368I2BGjx6tnTt3qqCgQJmZmY5tf/31V40ZM0bjxo3T+PHji7yio6O1ZcsW5eTk6MSJE5KkHTt2aMaMGSX+Hs8//7yuv/76Yp+/++67atiwYZHvLU+FhYW69tprNWHCBElSZmamevbsqffff/+s23Tu3Flr1qzR8ePH1aNHDyUkJGjBggXq0aOHJOmjjz5Ss2bNVFBQUOIYx44dU8OGDRUXF1dsWXR0tB544IFSzX/z5s3q0qWLtmzZUmxZcnKyXnnlFUVGRpZqLAAwkVtlTwAAcOkZP368Xn75ZXl4eMjV1dXxeXp6utq1a6chQ4Zo8ODBRbbJy8uTl5eXJKlatWq65557NG7cuFJ938iRI0sMD09PT8fnM2fO1CuvvCI3Nzfl5OSoQ4cOcnV1VVpamvr16ydXV1ddc801WrZsmSQpLS1NP//8s/bt26fDhw+rY8eOSkpK0po1a9SrVy9FRETo3Xff1cKFC7Vp0yZ5eHjIw8OjxPn99ttv6tq1a7HPV61apW7dusnb27vYsr1796pRo0YljtevXz/NmTPH8f7EiRO69tpr9f7776tjx45n/J0+//xzbdu2Te3bt5d06nceOXKkxo4dq/79+yskJKTYNi4uLho8eLD69Omj+Ph4SZLdbtfkyZM1YMAASaeOet55551F/l7/nd1u1759+0o8Euzu7i53d/czzlmSDh48qOPHj2vhwoWqX7++goODtWfPHvn6+urPP/9URkaG3N3dNWjQIB0+fFhr165VQUGBsrOzdfXVV6tu3bpnHR8ATEH8AQCcrk6dOiV+/tZbb8nb21sjRoxwhF5JXF1d5efnp8aNG6ugoEB2u102m63Yerm5uXJzc5Ofn5/jCJwkFRQUOI46nhYVFaV//etfkqQ2bdpo0aJFql+/vlq2bKlp06bphhtuKDJ2hw4d1KFDB02YMEFr167V/PnztXHjRq1Zs0YLFy6UJG3fvt0RfC4uLsXmmJiYqIKCAm3fvl0vv/yyDh48KEkKDg7Wrl27FB8fr44dOxYJuTp16ujWW291vJ84cWKxo5oBAQGOv87Ly9OAAQO0ffv2M/6ep3+rMWPG6J577lFERITj8yFDhmjmzJl66KGHtGrVqmIBt3v3bmVlZemZZ57Rhg0bJEnLly/X5ZdfLnd3dyUkJGjt2rWaPn16kd8/Ly9Pnp6ekuQYs6Q4dHd3l91uL/LZtm3bFBcXp6FDh0qSPv74Y7355pvKyMhQtWrV1LJlS+Xm5mr48OHavXu3tm3bVmTsn376SZZlKS8vTxMmTCD+AOD/I/4AABViw4YNmjp1qgYOHHjW8PvnNjfffPNZ1ykpeu69914tXrzYcaQpNjZWEyZMUEBAgFasWKHGjRvrhRdekCS1aNFC06ZN07Rp0zRz5kz5+PgUGSs3N/eMR/ROn3J6Jm3atHFcW3j33XcXGfOjjz6Sr6+v1qxZozVr1kg6df1beHh4kfi7/PLLdc0115Q4fnZ2trp3716qa/Zefvll7d69W1999VWRz93d3RUbG6sbbrhBjzzyiGbNmlUkpHbt2qUZM2bIbrdr7dq1kqRPP/1UHh4emjt3rvLz85WUlKT77ruvyLi33HKLVq9eLUln/Y3+vsyyLH3wwQd69tln5ePjo/vuu09BQUEaNWqUHnroIYWEhGjjxo1q1apVkTEsy1J8fLyuu+46SdLx48e1f/9+tWzZ8py/CwCYhPgDAJS7w4cPq1+/fo7/o5+VlaV+/fpp1KhRZwwb6VQ8/fLLLyUe+bMsS7m5uWrYsGGx7RYsWCA3Nze1bdtW4eHh+uCDD+Ti4qJRo0bJsiwNGzasyPoFBQVq166dZs2aJUk6cOCAXnjhBbm7u+vXX39VamqqHn30UR05ckSSFBkZqVq1aqlBgwZn/XN7eHjoo48+clyHtnbtWnXq1ElZWVn68MMPNX78+CKnv44ePVrbtm0765h/d/jwYQUEBGjRokWqXr36Gddbu3atJk6cqAkTJigsLKzY8muvvVYff/yx+vfvr4SEBH388ceOo7ddunTRbbfdpqFDhyohIUE7duzQfffdp4CAAPXp00dPP/20rrvuOkfoDR06VIWFhZoyZUqJ8927d6/y8/OVm5urWrVqOZatWbNGo0aN0vbt2zVs2DA999xzRf5MX375pZo2bSrp1E16Th/FlaR33nlHzz77rLZs2aJWrVrp0Ucf1bp16/T999+rcePGpf49AeBSR/wBAMpVWlqaunfvrubNm+uKK66Q9H+n+t188836+uuvz3h0r3r16mU6euPu7q4jR45o69atCgwM1OLFi9WrVy+5ublpyZIlWrduXYnbnT7iZbfbFRwcLHd3d3333XcKDg5WvXr1HEcS69WrJ39/f+Xl5Sk/P/+M8yjpNEcXFxe9+uqrqlmzph555JEiy/5+qmRp1K9fX/Pnzz/rOr/88ot69uypG2+8UXfeeaf2798vF5fi93uLiIjQBx98oGeeeUYtWrTQlClTNGDAAB06dEhRUVHas2ePFi1apBYtWiggIEBRUVHy8PDQ/PnzVbduXccR06SkJIWHh8vPz6/YdwwYMEAuLi7Ky8tTYWGh45rOjRs3qnfv3ho8eLCWLVummjVrFtt23rx5euihh7Rlyxa98cYbjvhbv369hg0bpiFDhjiOCL733nuKiIjQ7bffrk2bNumyyy4r9W8KAJcy7vYJACg3hw8fVqdOnVRQUKAFCxYUufZr7ty56ty5s+644w4tXbr0jGMcOHCgxLt7/v26t5LMnz9fhYWFSklJ0aBBg5SRkSGbzaaBAwfq8OHDRV6nr8U7rU6dOpo4caKioqKUmJio559/XmPGjNHAgQMlSWPHjtXzzz+vnJwcx6MaCgsLz3p6498999xzmjt3roYOHeo4Yiad/RTTkpQUcX+XlZWle+65R2FhYerbt6+aNm2qBg0aKCQkpMTXrFmz9NNPP6lJkyaOUF+4cKHc3d31/fff6/jx4+revbs6dOiguXPn6rvvvlNOTo62b9/uePxCQkLCGW9Us3LlSmVnZ6ugoEAFBQWOI7Dh4eE6cOCAxo4dW2L4ffnll/rhhx/UqVMnpaeny2az6eDBgzp27JgefPBB3XLLLZo4caJjfR8fHy1ZskQFBQXasWNHqX9PALjUEX8AgHKxadMmtW3bVm5ublq9erX8/f2LLHdzc9P8+fN10003qWfPnmcMwNMx9N///lcZGRnKyMjQJ598Umy8v8vPz9c777yj4OBgNWvWTO3bt9eMGTPO+CiC0/6+fOPGjbr11lvVvHlzde/eXZIcgXM6+EaMGKHNmzfrww8/1OzZs0s82jVw4EBHsJ4+wlm3bl1dc801On78uKKjox3rlnTkr0ePHkWi91xH+v7Oy8tLa9as0fLly9WvXz8lJSUpKSlJrq6umjlzpuP3zMjIUJcuXdSwYUM1btxYmzZtUps2bSRJgwYNUkxMjDw9PdWnTx9dddVVqlu3rrp27Sp/f3+9+uqruuyyy7Rp0yZZlqVdu3apRYsW55ybi4uL4z8G+Pn5nfU60B9//FGWZaljx44aMWKEEhISdOWVV2rSpEn65ptv1LVrV3Xu3NmxfosWLTRjxgzt2LGjyM1tAMB0xB8AwKlOH9Hp0KGD2rdvr7Vr15Z4NEc6dXrm559/rpYtW6pnz57as2dPsXVOH03z9vaWj4+PfHx85OnpKTe3M1+58O6778rT01NdunSRJD3++OPau3ev3NzctHDhQtWpU0c+Pj7y8vJSnTp1VK9ePQUGBjriLi8vT9HR0XJ3d9dXX33liJRmzZrpmWeeKXKUSTr1qIM///xTL7/8crG5TJo0SQcOHNCBAweKPXD+6aef1saNG/X9999LOvUswn8e+Zs0aZJ+/vlnx6ukR0acTWhoqGrWrCkvLy8FBAQ47kDapk0bx+/p4+OjI0eOqH79+sW2HzVqlHx9feXp6al9+/Zp7Nixstvtstvt2rNnj4YMGaLOnTvrq6++0u+//67s7GxHODrLqFGjlJWVpczMTH344YeqX7++jh8/rnHjxunKK69Us2bNtH79eh09elR79uzRgQMHdM0115zzERIAYBqu+QMAOJWrq6sCAwP13nvvKSoq6pzrV6tWTYsXL9bSpUsVGhpabHlJz4aTTgVaSU6cOKGJEydq2rRpWrJkiSSpe/fu6tKli2w2m1577TVJp4LQw8ND77zzjiQ5Hg0gnbrm77PPPnOcnpiWluZ4/ESrVq00dOhQPfPMM47vfOONN4rdwOS0GjVqqF69epJUbPl1112n8PBwzZkzR+3bt1dWVpZq1KhRZJ1GjRrpqquuKvHPWhZfffWVAgICil1LefDgwRKf8/faa6/p1Vdf1aOPPqpatWrp7bffVmZmpi6//HLHw9n79++v3r17q6CgQDfccEOposuyLCUlJZVqziXdzKawsFB//vmnatasqVtvvVWBgYGOo6I1atQodvdRAADxBwAoB88///x5rR8YGOi4nu6fTp9i2bx58yKf/zOSTvPx8dGmTZsUEhLiiD/p1PPyJk6c6Lhz6NGjR2VZlmbPni0fHx/l5ubKxcXFEST+/v56+eWXNXbs2BK/p6QgOXbs2HnfXCQ2NtZxfd3Jkyfl6+t7Xtufj6NHj2rKlCmKjIwscr1gTk6OkpOTS4w/Hx8fbdu2TZ9//rkee+wxff/991q3bp3CwsIcR1ZvueUW1atXT1OnTtWiRYvOOY8VK1Zo5MiR6tSp0xnXOXz4sOOOo99//73++OMP7dmzR+vXr9ehQ4dUvXp1+fv764svvlCtWrX05JNPaurUqSooKNDjjz9+XjfOAQBTcNonAKDCnOko3tnUq1fPcdrk31+//vrrGbcpKWJGjRqllJQUHTlyRG+99ZY8PDz08MMPq1q1alq1apVj2d8999xzOnLkiFJTU4tcbxgQEFDkermUlBQlJiaWeHpramqqDh486LhByT+1bt3acaQsJSWl3OIvISFBXbp0kbe3t1566aUiy/78809ZllXi7yadCu+4uDjVrl1bjzzyiF599VXl5+c7nhmYnZ3tmLdlWcW2Px3wcXFxjrtwhoSE6MEHHyzx+7KzsxUaGqo333xTkjRnzhw99dRT2rJli2rUqKHatWvr0KFDOnTokOPZfo899pj279+vpKQkPffcc2X4hQDg0seRPwBAhcnNzT3roxFK4urq6jht8kzOdCMXy7KKxMju3bv19ttva8GCBfrss8/UrVs3jRo1Su3bt9cbb7yhxx57TK6ursrNzdWvv/4qT0/PYo9rSElJUUFBQbE7hEqnjqzZ7XbHUcqCggI9++yzevbZZ8/558zLy9OOHTvOeESzrPLz8zVv3jy9+OKLcnFx0cqVKx03y9m0aZOWLVumpUuXys/PT82aNStxDLvdruuuu06bN29WSkqKZsyYobS0NC1cuFCNGzdW//79Va1aNb344ovq3bu3Zs6cqQEDBji2j4uLk3TqLqn33HOPtmzZ4jiV9bPPPtP27dsVHx/vCMgvvvhCWVlZCg8PlySNGzdOkydPloeHh2JjY/Xzzz8XueHPr7/+qieffFK+vr7KyMjQk08+qWHDhunqq68u9R1YAcAIFgAAFeTGG2+0evfufc712rVrZz300EPnXO/LL7+07r//fqtatWpW3759iy3v16+fdf/991s5OTlW586drcDAQOuFF16wDh8+XGS9lStXWldffbUVEhJiJSYmWgcOHLBcXV0tb29vy8/Pr9QvT09P6/rrr3eMW7duXeujjz5yvI+Li7MkWTk5OY7Pxo8fb/Xv399q3ry5VaNGDevo0aPn/HOfjwULFlguLi5WZGSkdezYsSLLEhMTrRo1alidO3e2NmzYUOL2v/zyi/X4449bAQEB1m233Wb99ttvlmVZVmZmpvXkk09a7u7u1sMPP2xlZWVZlmVZI0aMsCRZgwcPdoyRmZlp9ejRw9q0aVOx8bdu3Wo1aNDAkuR4ubm5WQ8++KBVWFhYbP1Zs2ZZderUsSzLsv79739bN998syXJ6ty5s5WQkGBt2rTJatWqlSXJCgwMtN59992y/XAAcAniyB8AoMKc6eHq/5Samlqq9QIDA7Vo0SI1bdpUjz76aLHlc+bMcfz1Z599purVq5f4bLzOnTurc+fOOn78uOOI0vkeoSzJO++8o6uvvtrxvnXr1tqwYUORO5U2aNBAP/zwgx588EE99NBDJd405kLcf//9ateuXYl38qxTp45SUlLOun1YWJj8/f21atUqtW7d2vG5l5eXrrrqKsXFxal9+/aOz8eNG6f27ds7Hrh+et0vvviixPFbtWqlvXv3lvrPk5OT47grq6+vr3Jzc/X11187HsdRt25d/fzzz1q2bJliY2OL/P4AYDqbZZVwcj4AABcB6/+f1nmuh50DAADiDwAAAACMwH8qBQAAAAADEH8AAAAAYADiDwAAAAAMwN0+q5DCwkIlJCSoevXqPJcIAAAAMJhlWcrIyFBQUJDTbmxG/FUhCQkJCgkJqexpAAAAAKgiDhw4oHr16jllLOKvCqlevbqkU3+DfX19K3k2AAAAACpLenq6QkJCHI3gDMRfFXL6VE9fX1/iDwAAAIBTLwfjhi8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAA/CQ9yro3vvfkN3uUdnTAAAAVdA3i6MrewoALlIc+QMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADXFTxl5GRoW7dusnb21t16tTRTz/95Fi2d+9e2Wy2s25f0jpnG7M85gkAAAAAlcGtsidQko4dOyoyMlKRkZFFPo+JiVFiYqJ27dqltLQ01axZ07Gsfv36Sk1NPe/vOtuYZVUeYwIAAADAhaiS8XcmycnJCg8PV1BQkIKCgoosc3Fxkb+/v1PHLI95AgAAAEBlqFKnfUZFRclms2ndunUaOHCgbDaboqKiNH/+fNlsNkVHRys2NlY2m03NmjUrsu2ZTvtcsmSJwsLCFBAQoJiYGMfnpRnzTCIjIzVmzBjNmTNHTZs21XvvvXfBYwIAAABAeapSR/4mT56s8ePHq1u3burbt6/69u0rDw8Pubm5KTU1VePHj9f+/fv1/vvvy9XV9ZzjHTlyRL1799aUKVN08803q2/fvo5lvXr1KtOYp61YsUIrV67UpEmT1KpVqzKNmZOTo5ycHMf79PT0Un8/AAAAAJyPKhV/Xl5e8vLykpubm7y9vYucxunv7y9PT0+5u7uX+vTO5cuXKzQ0VIMGDZIkRUdH64477pAk2e32Mo152p49e7Rz5075+fk5PjvfMceNG6fo6Ojz+l4AAAAAKIsqddqnsyUmJiokJMTxPjQ01GljDxgwoEj4lcXIkSOVlpbmeB04cMBJswMAAACAoqrUkb/TXFxcZFnWBY9Tu3ZtJSQkON7v37//gsc8rVq1ahc8hoeHhzw8PJwwGwAAAAA4uyp55C8sLEyrV69WYmKiVq9erYKCgjKN06VLF+3YsUOxsbHavXu3xowZ49yJAgAAAMBFokrG3+jRo7Vv3z41atRIgwcPVmFhYZnGCQ4O1rx58xQdHa0OHTooIiLCyTMFAAAAgIuDzXLG+ZVwivT0dPn5+alzl+Gy2zkdFAAAFPfNYm4WB5jgdBukpaXJ19fXKWNWyWv+KtuZ7tLZpEkTxcfHV+xkAAAAAMAJiL8SbN26tcTP7XZ7xU4EAAAAAJyE+CtBw4YNK3sKAAAAAOBUVfKGLwAAAAAA5yL+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAAt8qeAIpb+Oko+fr6VvY0AAAAAFxCOPIHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAM4FbZE0BxnUa+KVcPz8qeBgAAuET8OGl0ZU8BQBXAkT8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGqXPxlZGSoW7du8vb2Vp06dfTTTz85lu3du1c2m+2s25e0ztnGBAAAAAATuFXWF3fs2FGRkZGKjIws8nlMTIwSExO1a9cupaWlqWbNmo5l9evXV2pq6nl/19nGBAAAAAATVFr8nUlycrLCw8MVFBSkoKCgIstcXFzk7+/v1DEBAAAAwAQVftpnVFSUbDab1q1bp4EDB8pmsykqKkrz58+XzWZTdHS0YmNjZbPZ1KxZsyLbnum0zyVLligsLEwBAQGKiYlxfF6aMc9k5cqVat68uby9vRUREaHdu3dLkl5//XU9+OCDjvV+/fVXBQQEKD8/Xw0bNlRUVJTq1Kmj4cOH6+6771atWrX03//+twy/FAAAAAA4T4XH3+TJk5WamqqIiAhNmzZNqampmjx5snr16qXU1FQNHz5cffr0UWpqaqmuzTty5Ih69+6t4cOH68cff9TSpUsdy8o6piQNGDBAjzzyiHbu3Kkrr7xSL730kiTp3nvv1YoVK1RYWChJWr58ue666y65uZ06iJqWlqbRo0frrbfeUmRkpFq0aKHly5eX+B05OTlKT08v8gIAAACA8lDh8efl5SV/f3+5ubnJ29tb/v7+8vLykt1ul7+/vzw9PeXu7i5/f39Vr179nOMtX75coaGhGjRokMLCwhQdHe1YVtYxT88zJydHfn5+mjFjhubMmSNJatq0qWrXru04mrd8+XL16tXLsd1DDz2kK664QoGBgerRo4caNWqkvLy8Er9j3Lhx8vPzc7xCQkJKNTcAAAAAOF9V7m6f5ysxMbFINIWGhjpl3P/85z9au3at6tatqw4dOmjLli2OZffee6+WLVumkydPatu2bercubNjmaenZ5H/PZuRI0cqLS3N8Tpw4IBT5g4AAAAA/1Rp8efi4iLLsi54nNq1ayshIcHxfv/+/Rc85smTJ3Xy5EmtWrVKKSkpuuGGG/Twww87lvfq1UvLli3Tt99+q86dO8vDw6NM3+Ph4SFfX98iLwAAAAAoD5UWf2FhYVq9erUSExO1evVqFRQUlGmcLl26aMeOHYqNjdXu3bs1ZsyYC55bYWGh7rzzTs2ZM0dJSUlycXFxXOMnSeHh4UpLS9OcOXOKnPIJAAAAAFVVpcXf6NGjtW/fPjVq1EiDBw8uElfnIzg4WPPmzVN0dLQ6dOigiIiIC55b9erVNWfOHL3++uu6/PLLtXjxYk2fPr3IOvfcc48WL16s22+//YK/DwAAAADKm81yxrmXcIr09HT5+fmpzROj5Opx7msGAQAASuPHSaMrewoAztPpNkhLS3Pa5WFV7iHvFeVMD4tv0qSJ4uPjK3YyAAAAAFDOjI2/rVu3lvi53W6v2IkAAAAAQAUwNv4aNmxY2VMAAAAAgApz0T/nDwAAAABwbsQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAzg5uwB9+zZo9DQUGcPa5Rvxw2Xr69vZU8DAAAAwCWkVPE3Y8YMeXp6ysXl/w4Uuri46IorrlDr1q0dn1mWpWbNmik3N9f5MwUAAAAAlFmp4u+7776Tt7d3kfg7ceKEHnvsMR08eFADBgzQkiVLZLPZ5OPjU26TBQAAAACUTani75NPPinx8z///FMnTpzQ2rVr/29AN6efSQoAAAAAuEClKrWsrCxFRETI09NTklRYWKisrCz98ssvkiQvL6/ymyEAAAAA4IKVKv48PT01ffp0eXp6Kjk5WXl5eapevbpjuc1mK7cJAgAAAAAu3DnjLzs7W/fee6+WLFkiSXrxxReVkpKi6dOnKyUlRfPmzVN2drY+/PBDFRYWqqCgoNwnDQAAAAA4P+eMPw8PD61fv14PP/ywJOnnn39WXl6eIiMjtXPnTtntduXn52v9+vWSTp0SCgAAAACoWs4ZfzabTV5eXrruuuskSceOHVNWVpbatWunNm3a6MEHH1Tjxo0dN4WpXbt2+c4YAAAAAHDeSnXNn5+fnx5//HFJ0uHDh5WWlqaoqCjHcq75AwAAAICqrVTxt2fPHgUHB8tutys9PV0+Pj7y9/fX8OHD5eHhoaysrPKeJwAAAADgAricexUpODhY27dv1+bNm/Xwww+rdevW2rFjhzp16qSTJ0/K3d3dsS7X/AEAAABA1VOq+OvRo4d8fX112WWXyd3dXXXr1tXcuXNVq1Ytbdq0ScnJyY51MzIyym2yAAAAAICyKdVpn1OmTHH8dd++fZWTkyNJio2NlZ+fn44dO6ZatWpJkiZOnOj8WQIAAAAALkipjvzl5eWpU6dOkqTff/9dBw8e1Ndff61Vq1bp6NGj6tKlizIzM5WYmKgxY8ZwDSAAAAAAVDGlOvJnt9t14sQJSdLQoUPVv39/zZ07V61atVKtWrXk5uYmLy8v9e3bVwMHDpSXl1e5ThoAAAAAcH5KdeSvVatW+t///qdhw4YpJCREEyZMUHBwsO677z5JkmVZGjBggE6ePKnx48eX64QBAAAAAOevVPG3cOFCNW7cWMOHDy+2bMGCBUpKSpLNZtPSpUvl5laqg4kAAAAAgApUqvjbt2+fcnJylJqaWmxZenq6MjMztWrVKq1evdrpEwQAAAAAXLhSxd/UqVN17Ngxffvtt8WWDRo0SA0aNNC3336rwYMHa9euXU6fJAAAAADgwpQq/hYvXqxGjRrp8ccf15YtW3TZZZdp27ZtGjp0qKRT1/w1b95cr732ml544YVynTAAAAAA4PyVKv7y8/PVunVrZWdn6+DBg0pKSlJOTo6WLl2qtm3bKjw8XPn5+erTp49+/PFHZWZmlve8AQAAAADnoVTx5+bmpg8++EDfffedoqOjJUnTpk3TU089paNHj2r27Nlyc3OTq6urfvrpJ3l7e5frpAEAAAAA58dmWZZ1rpV69+4tb29vHT16VPv27dO1116rP//8U/Xq1Sv2TL+cnBzNnTu33CZ8KUtPT5efn5+umjRMrl4elT0dAABwEdocNbaypwDACU63QVpamnx9fZ0yZqmey3D99dfL09NTe/bsUXJyshISEvTDDz+oXr16evLJJ1W9enXHurm5uU6ZGAAAAADAeUoVf08//bQkaf369crIyND06dO1f/9+vfrqq5o6daq++OILtW3btjznCQAAAAC4AOf1RPa2bduqefPmkqT69etr5syZWrp0qa644opymRwAAAAAwDnOK/68vLyKXeN3xx13OHVCAAAAAADnK9XdPgEAAAAAFzfiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGuKjiLyMjQ926dZO3t7fq1Kmjn376ybFs7969stlsZ92+pHXONub5jgUAAAAAVZVbZU+gJB07dlRkZKQiIyOLfB4TE6PExETt2rVLaWlpqlmzpmNZ/fr1lZqaet7fdbYxAQAAAOBSUSXj70ySk5MVHh6uoKAgBQUFFVnm4uIif39/p44JAAAAAJeKKnXaZ1RUlGw2m9atW6eBAwfKZrMpKipK8+fPl81mU3R0tGJjY2Wz2dSsWbMi257pNMwlS5YoLCxMAQEBiomJcXxemjHLIjIyUmPGjNGcOXPUtGlTvffeexc8JgAAAABcqCp15G/y5MkaP368unXrpr59+6pv377y8PCQm5ubUlNTNX78eO3fv1/vv/++XF1dzznekSNH1Lt3b02ZMkU333yz+vbt61jWq1evMo1ZGitWrNDKlSs1adIktWrV6ozr5eTkKCcnx/E+PT3dKd8PAAAAAP9UpeLPy8tLXl5ecnNzk7e3d5HTOP39/eXp6Sl3d/dSn965fPlyhYaGatCgQZKk6Oho3XHHHZIku91epjFLY8+ePdq5c6f8/PzOut64ceMUHR3ttO8FAAAAgDOpUqd9OltiYqJCQkIc70NDQyvkewcMGHDO8JOkkSNHKi0tzfE6cOBABcwOAAAAgImq1JG/01xcXGRZ1gWPU7t2bSUkJDje79+//4LHLI1q1aqVaj0PDw95eHiU82wAAAAAoIoe+QsLC9Pq1auVmJio1atXq6CgoEzjdOnSRTt27FBsbKx2796tMWPGOHeiAAAAAHCRqJLxN3r0aO3bt0+NGjXS4MGDVVhYWKZxgoODNW/ePEVHR6tDhw6KiIhw8kwBAAAA4OJgs5xxfiWcIj09XX5+frpq0jC5enE6KAAAOH+bo8ZW9hQAOMHpNkhLS5Ovr69TxqyS1/xVtjPd+bNJkyaKj4+v2MkAAAAAgBMQfyXYunVriZ/b7faKnQgAAAAAOAnxV4KGDRtW9hQAAAAAwKmq5A1fAAAAAADORfwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwABulT0BFLfukZfk6+tb2dMAAAAAcAnhyB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADCAW2VPAMWN++4JeVZzr+xpAABQIV65cXZlTwEAjMCRPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAS6q+MvIyFC3bt3k7e2tOnXq6KeffnIs27t3r2w221m3L2mds415vmJiYtSxY8cybw8AAAAA5cWtsidQko4dOyoyMlKRkZFFPo+JiVFiYqJ27dqltLQ01axZ07Gsfv36Sk1NPe/vOtuYAAAAAHCpqJLxdybJyckKDw9XUFCQgoKCiixzcXGRv7+/U8cEAAAAgEtFlTrtMyoqSjabTevWrdPAgQNls9kUFRWl+fPny2azKTo6WrGxsbLZbGrWrFmRbc902ueSJUsUFhamgIAAxcTEOD4vzZglWbt2rRo2bKivv/5aDRo0UI0aNfTOO+84lufm5qpnz57y8fHRHXfcoaNHj5b9BwEAAAAAJ6lS8Td58mSlpqYqIiJC06ZNU2pqqiZPnqxevXopNTVVw4cPV58+fZSamlqqa/OOHDmi3r17a/jw4frxxx+1dOlSx7KyjimdOlo4fvx4ffPNN4qOjtawYcOUlZUlSfrhhx/UunVrbdu2TS4uLnryySfPOE5OTo7S09OLvAAAAACgPFSp+PPy8pK/v7/c3Nzk7e0tf39/eXl5yW63y9/fX56ennJ3d5e/v7+qV69+zvGWL1+u0NBQDRo0SGFhYYqOjnYsK+uYknTixAlNnz5dV155paKiopSbm+s4wle3bl29+OKLCg0N1ZgxY7Ro0SIVFBSUOM64cePk5+fneIWEhJTq+wEAAADgfFWp+HO2xMTEIkEVGhrqlHFr1KihVq1aSZLc3d0lSZZlSZIaNGggF5dTP2v9+vWVn5+vpKSkEscZOXKk0tLSHK8DBw44ZX4AAAAA8E9V8oYvLi4ujpi6ELVr11ZCQoLj/f79+y94TEny9fU947KDBw/KsizZbDYdOnRIrq6uCggIKHFdDw8PeXh4OGVOAAAAAHA2VfLIX1hYmFavXq3ExEStXr36jKdNnkuXLl20Y8cOxcbGavfu3RozZoxzJ1qCgwcPasKECdq7d69effVVdevWTW5uVbKxAQAAABikSsbf6NGjtW/fPjVq1EiDBw9WYWFhmcYJDg7WvHnzFB0drQ4dOigiIsLJMy2ubdu22rhxo1q1aqXMzExNnz693L8TAAAAAM7FZjnj/Eo4RXp6uvz8/DRiaT95VnOv7OkAAFAhXrlxdmVPAQCqnNNtkJaWdtbLzs4H5yOW4EwPi2/SpIni4+MrdjIAAAAA4ATEXwm2bt1a4ud2u71iJwIAAAAATkL8laBhw4aVPQUAAAAAcKoqecMXAAAAAIBzEX8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAAAAAAMQfwAAAABgAOIPAAAAAAxA/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwAPEHAAAAAAYg/gAAAADAAMQfAAAAABiA+AMAAAAAAxB/AAAAAGAA4g8AAAAADED8AQAAAIABiD8AAAAAMIBbZU8AxY2MeF++vr6VPQ0AAAAAlxCO/AEAAACAAYg/AAAAADAA8QcAAAAABiD+AAAAAMAAxB8AAAAAGID4AwAAAAADEH8AAAAAYADiDwAAAAAMQPwBAAAAgAGIPwAAAAAwgFtlTwD/x7IsSVJ6enolzwQAAABAZTrdBKcbwRmIvyokOTlZkhQSElLJMwEAAABQFSQnJ8vPz88pYxF/VUjNmjUlSfv373fa32CgJOnp6QoJCdGBAwfk6+tb2dPBJYx9DRWFfQ0VhX0NFSUtLU3169d3NIIzEH9ViIvLqUsw/fz8+IcJKoSvry/7GioE+xoqCvsaKgr7GirK6UZwylhOGwkAAAAAUGURfwAAAABgAOKvCvHw8NArr7wiDw+Pyp4KLnHsa6go7GuoKOxrqCjsa6go5bGv2Sxn3jsUAAAAAFAlceQPAAAAAAxA/AEAAACAAYg/AAAAADAA8VeBfvvtN7Vt21Y1atTQsGHDVJrLLdetW6fmzZvrsssu06RJkypglrgUlGVf++CDD1S3bl3Z7XbddtttSkxMrICZ4mJXln3ttLy8PIWHh2vt2rXlN0FcMi5kX3vggQc0ZMiQcpwdLiVl2dcmTJigwMBA+fr6qlevXkpOTq6AmeJSkJycrEaNGmnv3r2lWv9C24D4qyA5OTnq3r272rRpo82bN+v3339XTEzMWbc5duyY7rrrLvXp00c//PCD5s6dq7i4uIqZMC5aZdnXNm7cqNGjR+uTTz7RX3/9pezsbD3//PMVM2FctMqyr/3dW2+9pd9++638JohLxoXsaytWrNC3336rsWPHlu8kcUkoy762fv16xcbGav369dqyZYuys7P13HPPVcyEcVFLSkpSt27dSh1+TmkDCxVi0aJFVo0aNayTJ09almVZW7dutSIiIs66zeTJk62mTZtahYWFlmVZ1pdffmn169ev3OeKi1tZ9rWZM2dan3/+ueP97NmzrSZNmpTrPHHxK8u+dtrOnTstf39/q2HDhlZcXFw5zhKXgrLua5mZmVZoaKg1a9as8p4iLhFl2dcmTJhgDRs2zPH+k08+sa6//vpynScuDbfccos1ZcoUS5L1119/nXN9Z7QBR/4qyC+//KJ27drJ29tbktSyZUv9/vvv59ymU6dOstlskqRrr71WW7ZsKfe54uJWln3tkUceUc+ePR3vd+zYobCwsHKdJy5+ZdnXTnv88cc1YsQINWjQoDyniEtEWfe1sWPHKisrS25ubvr222/P61RRmKks+9qVV16pL774Qrt379bRo0c1a9Ysde7cuSKmi4vcBx98oKFDh5Z6fWe0AfFXQdLT09WoUSPHe5vNJldXV6WmppZ6G19fXx06dKhc54mLX1n2tb9LTk7Wv//9bz3xxBPlNUVcIsq6r3300UdKS0vjtCiUWln2tf3792vSpEkKCwvT/v37NWzYMPXs2ZMAxFmVZV/r2rWrGjdurLCwMAUGBurkyZMaMWJERUwXF7nQ0NDzWt8ZbUD8VRA3Nzd5eHgU+czT01OZmZml3uZc6wNS2fa1v3viiSfUvn173XnnneUxPVxCyrKvHTt2TCNHjtSsWbPk5uZW3lPEJaIs+1pMTIwCAwO1atUqvfTSS1q7dq3WrVunVatWlfd0cREry7726aefat++ffrjjz+UnJysK6+8Uv379y/vqcJAzmgD/s1bQWrWrFnsxgYZGRlyd3c/6zbHjh0r9fqAVLZ97bTZs2dr/fr12rp1aznNDpeSsuxrTz/9tB555BFdddVV5Tw7XErKsq8dPHhQt9xyi+P/KFWvXl2NGzfWX3/9Va5zxcWtLPvaf/7zHw0ePFhNmzaVJE2ZMkV+fn46fvy4/P39y3O6MIwz2oAjfxWkbdu22rRpk+P93r17lZOTo5o1a5Z6m61btyo4OLhc54mLX1n2NUmKj4/X008/rfnz5yswMLC8p4lLQFn2tXnz5undd9+Vv7+//P39tXHjRnXr1k3jx4+viCnjIlWWfS0kJERZWVmO94WFhTp48CDXmeKsyrKv5efn68iRI473px+VVFBQUH4ThZGc0QbEXwW58cYblZaWpo8//liSNH78eN16661ydXVVenq68vLyim1z1113aePGjYqLi1N+fr4mTpyoLl26VPTUcZEpy7525MgRde/eXcOHD1ebNm104sQJnThxoqKnjotMWfa1v/76S9u2bdPWrVu1detWXXPNNZo5c6aioqIqevq4iJRlX7v//vu1ePFiff755zp48KBGjhypnJwcRUREVPT0cREpy74WERGhDz74QDNmzFBsbKweeOABXX/99QoICKjo6eMSUa5tcP43JUVZLVq0yPLy8rJq165tBQQEWL/99ptlWZbVoEEDa9GiRSVuM23aNMtut1uXXXaZ1aBBA+vw4cMVOGNcrM53X5s8ebIlqdgLOJey/HPt72666SYe9YBSKcu+tmTJEuuqq66yPD09rSuuuMLauHFjBc4YF6vz3deysrKsIUOGWEFBQZa7u7t10003Wbt27argWeNipn886qE828D2/78QFeTQoUPavHmz2rdvr1q1apVqm127dmn79u266aab5OvrW84zxKWiLPsaUBbsa6go7GuoKOxrqMoupA2IPwAAAAAwANf8AQAAAIABiD8AAAAAMADxBwAAAAAGIP4AAAAAwADEHwAAAAAYgPgDAOASkpGRoePHj1f2NAAAVRDxBwDAGUyePFmfffZZqddfsWKFmjdvXo4zKq6wsFDt2rXTd999J0l65plnFB0dXeK6J06c0Ouvvy7LstSpUyctXLhQy5cv19dff63c3Fy1aNFChw4dqsjpAwAqkFtlTwAAgKpq48aNuu6660q9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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "最佳模型: tfidf_svm\n",
      "最佳F1分数: 0.6913\n",
      "最佳参数: {'tfidf__max_features': 5000, 'svm__kernel': 'linear', 'svm__gamma': 'scale', 'svm__C': 1}\n"
     ]
    }
   ],
   "source": [
    "import jieba\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import rcParams\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n",
    "from sklearn.model_selection import train_test_split, RandomizedSearchCV\n",
    "from sklearn.metrics import classification_report, confusion_matrix, f1_score\n",
    "from sklearn.ensemble import RandomForestClassifier, VotingClassifier\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.naive_bayes import MultinomialNB\n",
    "from sklearn.pipeline import Pipeline\n",
    "import seaborn as sns\n",
    "import re\n",
    "from zhconv import convert\n",
    "\n",
    "# 设置Matplotlib支持中文字体显示\n",
    "rcParams['font.sans-serif'] = ['SimHei']\n",
    "rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "# 1. 数据预处理\n",
    "def preprocess_text(text):\n",
    "    # 简繁转换\n",
    "    text = convert(text, 'zh-hans')\n",
    "    # 去除特殊字符和数字\n",
    "    text = re.sub(r'[^\\w\\s]', '', text)\n",
    "    text = re.sub(r'\\d+', '', text)\n",
    "    # 加载停用词表\n",
    "    with open('chinese_stopwords.txt', encoding='utf-8') as f:\n",
    "        stopwords = set(f.read().split())\n",
    "    # 加载自定义词典（如果有）\n",
    "    jieba.load_userdict('bubble_tea_terms.txt')\n",
    "    \n",
    "    words = jieba.cut(text)\n",
    "    return ' '.join([word for word in words if word not in stopwords and len(word) > 1])\n",
    "\n",
    "# 加载数据\n",
    "df = pd.read_csv('final_labeled_comments.csv')\n",
    "df['processed_text'] = df['text'].astype(str).apply(preprocess_text)\n",
    "\n",
    "# 2. 文本分类（情感分析）\n",
    "# 标签编码\n",
    "label_map = {'positive': 0, 'neutral': 1, 'negative': 2}\n",
    "df['label'] = df['最终情感标签'].map(label_map)\n",
    "\n",
    "# 3. 定义多个模型管道\n",
    "pipelines = [\n",
    "    ('tfidf_rf', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=10000, ngram_range=(1, 3))),\n",
    "        ('rf', RandomForestClassifier(class_weight='balanced', random_state=42, n_jobs=-1))\n",
    "    ])),\n",
    "    ('tfidf_svm', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=10000, ngram_range=(1, 3))),\n",
    "        ('svm', SVC(class_weight='balanced', probability=True, random_state=42))\n",
    "    ])),\n",
    "    ('tfidf_lr', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=10000, ngram_range=(1, 3))),\n",
    "        ('lr', LogisticRegression(class_weight='balanced', max_iter=1000, random_state=42))\n",
    "    ])),\n",
    "    ('tfidf_nb', Pipeline([\n",
    "        ('tfidf', TfidfVectorizer(max_features=10000, ngram_range=(1, 3))),\n",
    "        ('nb', MultinomialNB())\n",
    "    ]))\n",
    "]\n",
    "\n",
    "# 4. 数据集拆分\n",
    "X = df['processed_text']\n",
    "y = df['label']\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n",
    "\n",
    "# 5. 模型训练与评估\n",
    "results = []\n",
    "model_names = []\n",
    "f1_scores = []\n",
    "\n",
    "for name, pipeline in pipelines:\n",
    "    print(f\"\\n训练模型: {name}\")\n",
    "    \n",
    "    # 简化参数搜索以加快速度\n",
    "    if 'rf' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [5000, 10000],\n",
    "            'rf__n_estimators': [100, 200, 300],\n",
    "            'rf__max_depth': [None, 10, 20, 30],\n",
    "            'rf__min_samples_split': [2, 5, 10],\n",
    "            'rf__min_samples_leaf': [1, 2, 4],\n",
    "            'rf__max_features': ['sqrt', 'log2']\n",
    "        }\n",
    "    elif 'svm' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [5000, 10000],\n",
    "            'svm__C': [0.1, 1, 10],\n",
    "            'svm__gamma': ['scale', 'auto'],\n",
    "            'svm__kernel': ['linear', 'rbf']\n",
    "        }\n",
    "    elif 'lr' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [5000, 10000],\n",
    "            'lr__C': [0.1, 1, 10],\n",
    "            'lr__penalty': ['l1', 'l2'],\n",
    "            'lr__solver': ['liblinear', 'saga']\n",
    "        }\n",
    "    elif 'nb' in name:\n",
    "        param_dist = {\n",
    "            'tfidf__max_features': [5000, 10000],\n",
    "            'nb__alpha': [0.1, 0.5, 1.0]\n",
    "        }\n",
    "    \n",
    "    random_search = RandomizedSearchCV(\n",
    "        estimator=pipeline,\n",
    "        param_distributions=param_dist,\n",
    "        n_iter=20,\n",
    "        cv=5,\n",
    "        scoring='f1_weighted',\n",
    "        n_jobs=-1,\n",
    "        verbose=1,\n",
    "        random_state=42\n",
    "    )\n",
    "    \n",
    "    try:\n",
    "        random_search.fit(X_train, y_train)\n",
    "        \n",
    "        # 评估模型\n",
    "        y_pred = random_search.predict(X_test)\n",
    "        f1 = f1_score(y_test, y_pred, average='weighted')\n",
    "        \n",
    "        results.append({\n",
    "            'model': name,\n",
    "            'best_params': random_search.best_params_,\n",
    "            'f1_score': f1\n",
    "        })\n",
    "        \n",
    "        model_names.append(name)\n",
    "        f1_scores.append(f1)\n",
    "        \n",
    "        print(f\"{name} 最佳参数: {random_search.best_params_}\")\n",
    "        print(f\"{name} 测试集F1分数: {f1:.4f}\")\n",
    "        \n",
    "        # 生成分类报告\n",
    "        print(\"\\n分类报告:\")\n",
    "        print(classification_report(y_test, y_pred, target_names=list(label_map.keys())))\n",
    "        \n",
    "        # 生成混淆矩阵\n",
    "        cm = confusion_matrix(y_test, y_pred)\n",
    "        plt.figure(figsize=(8, 6))\n",
    "        sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', \n",
    "                    xticklabels=list(label_map.keys()), yticklabels=list(label_map.keys()))\n",
    "        plt.xlabel('预测标签')\n",
    "        plt.ylabel('真实标签')\n",
    "        plt.title(f'{name} 混淆矩阵')\n",
    "        plt.show()\n",
    "        \n",
    "    except Exception as e:\n",
    "        print(f\"训练 {name} 模型时出错: {e}\")\n",
    "        continue\n",
    "\n",
    "# 6. 可视化比较\n",
    "plt.figure(figsize=(10, 6))\n",
    "sns.barplot(x=f1_scores, y=model_names, palette='viridis')\n",
    "plt.title('不同模型的F1分数比较')\n",
    "plt.xlabel('加权F1分数')\n",
    "plt.ylabel('模型')\n",
    "plt.xlim(0, 1)\n",
    "plt.show()\n",
    "\n",
    "# 7. 选择最佳模型\n",
    "if results:\n",
    "    best_model_info = max(results, key=lambda x: x['f1_score'])\n",
    "    print(f\"\\n最佳模型: {best_model_info['model']}\")\n",
    "    print(f\"最佳F1分数: {best_model_info['f1_score']:.4f}\")\n",
    "    print(f\"最佳参数: {best_model_info['best_params']}\")\n",
    "else:\n",
    "    print(\"没有成功训练任何模型，请检查数据和参数设置\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ff404930-8acb-4493-bf53-cd8d2006d956",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
